我正在制作两个豆子说ABean和BBean。我想将BBean注入ABean但这会导致空指针错误,可能是因为bean尚未实例化。我怎样才能在bean中注入bean:
@Singleton
public class ABean {
@Inject
BBean bean;
....
}
我使用java ee 7和wildfly服务器。两个bean都是单例,因此BBean也被声明为:
public class BBean {
@PostConstruct
public void startup() {
..
}
..
}
没有依赖关系,我能够创建两个bean,因为我有必要的META-INF文件夹和beans.xml文件。然而,我得出的结论是,这可能是不好的做法/反模式。无论如何,我不再使用这种方法了。
答案 0 :(得分:1)
也许您忘记添加beans.xml文件,以便在您的应用程序中启用CDI。这就是Java EE 6教程所说的http://docs.oracle.com/javaee/6/tutorial/doc/gjbnz.html:
使用CDI的应用程序必须具有名为beans.xml的文件。该文件可以完全为空(它仅在某些有限的情况下具有内容),但必须存在。对于Web应用程序,beans.xml文件必须位于WEB-INF目录中。对于EJB模块或JAR文件,beans.xml文件必须位于META-INF目录中。
答案 1 :(得分:-1)
你还记得包含一个setter所以可以注入bean吗? @Inject不像@EJB那样工作。
同样,如前所述,在实例化拥有bean之前不要尝试使用bean(不是在构造函数中,只在@ PostConstruct'ed方法中)
希望有所帮助。