【发布时间】:2015-01-23 20:11:26
【问题描述】:
我的代码库中有以下场景:
//this bean, which will be injected,
//is not annotated
public class HelperUtil {
//only default constructor with no args
public void doThis(String _in) {
//...
}
public void doThat() {
//...
}
}
在下面的类中我们进行注入:
@Named
@Stateless
public class BusinessManager {
@PersistenceContext(unitName = "default")
private EntityManager em;
@Inject
private HelperUtil helperUtil ;
//...
}
Q1:什么时候通过调用默认构造函数来真正初始化要注入的HelperUtil实例?当应用程序服务器(在我的情况下为JBoss)启动时实例化第一个注入它的客户端(如BusinessManager)时是否完成(并且该客户端将由容器初始化,因为它被注释为@987654326 @)?
Q2:在上面的演示中,只要容器以外的客户端通过直接调用构造函数而不是通过获取实例来请求实例,HelperUtil 将保持为singleton DI?
Q3:在这种情况下使用 DI 和 @Inject 与直接调用构造函数 (HelperUtil helper = new HelperUtil();) 相比有什么优势?
【问题讨论】:
-
如何做到这一点取决于框架。在某些框架中,例如iPOJO,注入的字段可能在第一次使用之前不会创建。
-
您知道在
JBoss上运行的JSF框架是如何完成的吗?
标签: java jboss dependency-injection cdi