为什么Spring @Autowired ApplicationContext appContext为null?

时间:2013-05-29 19:36:09

标签: spring facelets

我有带注释的Spring bean:

@Named
@Scope("session")

这个bean属性:

@Autowired
ApplicationContext appContext;

Spring配置文件有条目(适用于其他anotations / injections):

<context:component-scan base-package="my.package.name" />

为什么在这样的代码和配置之后appContext为null?

我正在尝试获取ApplicationContext(在其上调用getBean(...)),这可能是以前的Spring版本中相当复杂的任务(从其他讨论中判断)(例如,需要在Spring Web应用程序中获取ServletContext)创建ApplicationContext并获取ServletContext可以完全涉及不直接访问HTTP Request对象的bean的任务。在Spring 3.x中,据我所知,可以使用简单的@Autwired注射。如何访问AppContext?

1 个答案:

答案 0 :(得分:2)

这里的第一个问题是你正在使用@Named这是Java EE注释,而且我知道Spring还支持Java EE注释。因此,不要使用@Named尝试使用Spring注释@ Service,@ Component,@ Repository等。

以下是您使用JSF Managed bean的示例,以展示如何集成bean。

@ManagedBean(name="myBacking")
@RequestScoped
public class MyBacking {

    private String myText;

    @ManagedProperty(value="#{mySpring}")
    MySpringBean mySpring;

    public String getMyText() {
        myText = mySpring.getText();
        return myText;
    }

    public void setMyText(String myText) {
        this.myText = myText;
    }

    public MySpringBean getMySpring() {
        return mySpring;
    }

    public void setMySpring(MySpringBean mySpring) {
        this.mySpring = mySpring;
    }


}

@Service("mySpring")
@Scope("request")
public class MySpringBean {

    @Autowired
    MySecond mySecond;

    public String getText(){
        return "Hello KP" + mySecond.appObj();
    }

}


@Service
@Scope("request")
public class MySecond {

    @Autowired
    ApplicationContext applicationContext;

    public String appObj(){
        MyThrid mythird =(MyThrid)applicationContext.getBean("myThrid");
        return "My Second Bean calld "+ mythird.getTxt();
    }
}

@Service
public class MyThrid {

    public String getTxt(){
        return "from thrid Bean";
    }
}