我有带注释的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?
答案 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";
}
}