Java EE Bean注入另一个Bean

时间:2014-12-23 22:04:13

标签: java java-ee javabeans cdi

我正在制作两个豆子说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文件。然而,我得出的结论是,这可能是不好的做法/反模式。无论如何,我不再使用这种方法了。

2 个答案:

答案 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方法中)

希望有所帮助。