2014-05-05 2 views
1

Я на ниже JSF управляемый компонент:Почему мой @Autowired объект null?

package com.example; 

import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Component; 

@Component 
@ManagedBean 
public class Bean implements Serializable { 

    @Autowired 
    private SomeService someService; 

    public void update() { 
     someService.update(someEntity); 
    } 

    // ... 
} 

И ниже Весеннее обслуживание:

@Transactional 
@Repository 
public class SomeService { 

    @Autowired 
    private SessionFactory sessionFactory; 

    // ... 
} 

Spring сконфигурирован, как показано ниже:

<?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:context="http://www.springframework.org/schema/context" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <description>Example configuration to get you started.</description> 

    <context:component-scan base-package="com.example" /> 

    <!-- To add exception translation to a template-less Hibernate DAO --> 
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 

    <context:annotation-config /> 

    <!-- Database Configuration --> 
    <import resource="database/DataSource.xml" /> 
    <import resource="database/Hibernate.xml" /> 
    <tx:annotation-driven /> 
</beans> 

Когда я называю JSF удалось фасоль update() метод, он выбрасывает NullPointerException:

javax.faces.FacesException: #{bean.update()}: java.lang.NullPointerException 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:117) 
    at org.springframework.faces.webflow.FlowActionListener.processAction(FlowActionListener.java:71) 
    at org.springframework.faces.model.SelectionTrackingActionListener.processAction(SelectionTrackingActionListener.java:55) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:786) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1251) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:191) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101) 
    ... 28 more 
Caused by: java.lang.NullPointerException 
    at com.example.Bean.update(Bean.java:45) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:278) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87) 
    ... 29 more 

Иными словами, someService является null. Почему я не могу понять, почему. У меня есть @Component, объявленный в верхней части моего боба. Поэтому я ожидаю, что @Autowired будет работать. Любая помощь будет отличной!

+0

Можете ли вы разместить свой файл конфигурации? Вы используете компонентное сканирование? –

+0

Я использую компонент: сканирование. Когда я пытаюсь использовать другой класс, находящийся в одном пакете, я не получаю нулевой указатель. Я разместил свой файл конфигурации. – MrTimotheos

+0

А вы также аннотировали FilmBo с @Component? –

ответ

1

Вы не можете смешивать аннотации и контексты, как вы пытаетесь здесь.

Во-первых, чтобы вставить фасоль весны (или действительно, любой компонент) в обработанный JSF компонент, используйте аннотацию @ManagedProperty. Таким образом, если все остальное настроено правильно (весна-накрест, в том числе весной Лица EL распознавателя), вы должны иметь:

@ManagedProperty("#{someService}") 
private SomeService someService; 

Когда вы объявляете класс как @ManagedBean, это вне контекста Spring. В итоге @Autowired не имеет значения. весна не может ничего вводить во что-либо, что находится вне его контекста.

Если вы хотите использовать пару @Component и @Autowired, вам нужно удалить @ManagedBean так, что он становится Весенним управляемым компонентом вместо JSF управляемого компонента.

+0

Не совсем верно; Весна может приобретать объекты другими способами. В частности. '@ Configurable', вероятно, будет делать то, что ему нужно. – chrylis

+0

@ chrylis- это интересно. У вас есть какие-либо ресурсы в этом отношении (весна впрыскивается в фасоль не в ее контексте)? – kolossus

+0

Проверьте мой дубликат; Я в основном написал статью и имею пример проекта. – chrylis