2016-07-24 3 views
0

У меня есть веб-модуль с JSF 2 end Spring 4.3. В бэкбонге я использую @Autowired для DI услуги JAR. В модуле EAR есть WAR, JAR с @Service Spring и JAR с конфигурационным файлом Spring.Spring @Autowired (required = true) null

web.xml Ниже фрагмент кода:

<context-param> 
     <param-name>locatorFactorySelector</param-name> 
     <param-value>classpath:beanRefContext.xml</param-value> 
    </context-param> 

    <context-param> 
     <param-name>parentContextKey</param-name> 
     <param-value>sharedContext</param-value> 
    </context-param> 
    <context-param> 
    <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:applicationContext.xml</param-value> 
    </context-param> 
<listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <listener> 
     <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
    </listener> 

applicationContext.xml:

<context:annotation-config /> 
    <context:spring-configured /> 
<!-- package of @Service class in jar module in EAR-- > 
    <context:component-scan base-package="com.ipdb.service" /> 

beanRefContext.xml:

<bean id="sharedContext" class="org.springframework.context.support.ClassPathXmlApplicationContext"> <constructor-arg> 
    <list> 
     <value>spring-ctx.xml</value> 
    </list> 
</constructor-arg> </bean> 

Когда я использую @Autowired(required=null) в подкладочный Bean значение null (там не является исключением). My JSF bean

@Component 
@ManagedBean 
@ViewScoped 
public class PortfolioController { 


    @Autowired(required = true) 
    private PortfolioService portfolioService; 

... 

Помогите мне, пожалуйста.

+1

Это не весна фасоль и весна не управляющий или его автоматического связывания. – chrylis

+0

Поскольку ваш вопрос был первоначально помечен [spring-mvc], вот немного пищи для размышлений: http://stackoverflow.com/q/18744910 – BalusC

ответ

2

PortfolioController считается JSF контекст боб добавления @Component к @ManagedBean совершенно неправильно, то вы не можете пометить тот же класс, как фасоль в двух различных контекстах (JSF и Spring).

Два решения либо сделать PortfolioController пружинный боб, таким образом удалить @ManagedBean и @ViewScoped или впрыснуть PortfolioController через JSF инъекции аннотацию @ManagedProperty

@ManagedProperty("#{portfolioService}") 
private PortfolioService portfolioService; 
+0

Хорошо, я удалил '@ Autowired' с' @ ManagedBean'. Служба реализации обнаружена сейчас, но у меня есть эта ошибка: 'Невозможно преобразовать [email protected] типа class com.ipdb.service.portfolio.impl.PortfolioServiceImpl для интерфейса com.ipdb.service .PortfolioService'. 'PortfolioServiceImpl' реализует' PortfolioService'. Не могли бы вы мне помочь? –

+0

Я решил, это была проблема с зависимостью в pom;) –

0

если applicationContext.xml в вашем банке зависимости, то вам необходимо добавить звездочку после пути к классам:

<param-name>contextConfigLocation</param-name> 
     <param-value>classpath*:applicationContext.xml</param-value> 
    </context-param> 

С Звездочка пружинных поиска файлов applicationContext.xml где-нибудь в пути к классам не только текущий проект.