2014-01-29 5 views
1

Я пытаюсь объединить несколько бобов (я создал упрощенную версию того, что я пытаюсь выполнить), но мне все время говорят, что автоузел bean имеет значение null.Весной автоматическая инъекция не работает для моих аннотированных бобах

Caused by: java.lang.NullPointerException 
    at bean.HelloWorld.getMessage(HelloWorld.java:15) 

TestDAO.java

package dao; 
import org.springframework.context.annotation.Primary; 
import org.springframework.stereotype.Repository; 
@Primary 
@Repository("testDAO") 
public class TestDAO { 
    public String getMessage() { 
     return "Hello World!"; 
    } 
} 

TestSOA.java

package soa; 
import dao.TestDAO; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
@Service("testSOA") 
public class TestSOA { 
    @Autowired 
    private TestDAO testDAO; 
    public String getMessage() { 
     return testDAO.getMessage(); 
    } 
} 

HelloWorld.java

package bean; 
import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import soa.TestSOA; 
@ManagedBean(name = "helloWorld") 
@SessionScoped 
@Controller 
public class HelloWorld implements Serializable { 
    @Autowired 
    private TestSOA testSOA; 
    public String getMessage() { 
     return testSOA.getMessage(); 
    } 
} 

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:p="http://www.springframework.org/schema/p" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> 

    <context:component-scan base-package="dao, soa, bean"/> 

</beans> 

Тогда в index.xhtml

Message:<h:outputText value="#{helloWorld.message}"/> 

Я не понимаю, я думал, что я сделал все, что было предположить, чтобы. web.xml объявлен ContextLoaderListener. Я пробовал использовать CDI и другие методы Spring и вручную подключался с помощью applicationContext.xml. Ничего ...

Я предполагаю, что у меня нет основополагающего принципала относительно весны или инъекции. Я использую Java 1.6, Spring 3.1.1 и Tomcat 7.0.34.0

ответ

0

Попробуйте добавить <context:annotation-config /> к вашему applicationContext.xml до того <context:component-scan> чтобы включить аннотацию на основе конфигурации Spring. См. Раздел Annotation-based container configuration в справочнике по весне.

+0

Нет, никакого эффекта, она все еще не инъекционный (или она есть, но это инъекционные нуль?). Спасибо за совет, но все же. – Huffy

0

Помимо предоставленного, чтобы внедрить компонент, управляемый Spring, в управляемый bean-компонент JSF, вы должны иметь возможность делегировать разрешение управляемых компонентов внешнему распознавателю.

Проверьте ваш web.xmlorg.springframework.web.context.request.RequestContextListener для и

faces-config.xml для org.springframework.web.jsf.el.SpringBeanFacesELResolver.

Смотрите также http://deevodavis.wordpress.com/injecting-spring-beans-into-jsf-2-managedbean-classes/

Смежные вопросы