关于@Singleton对象的CDI @New。它能做什么?

时间:2016-02-11 18:19:39

标签: java java-ee cdi weld

我试图定义一个CDI生成器来注入一个或另一个对象实例。

这是制作人的代码:

@Produces
public static MyRepository getMyRepository(@New MyCacheRepository cache, 
                                                                @New MyNormalRepository db) {

    if(conditions) {
        return cache;
    }

    return db;

}

MyCacheRepository被声明为@javax.inject.Singleton。在这种情况下,CDI是否遵守单例条件,或者只要需要它就会创建@New MyCacheRepository个实例?

1 个答案:

答案 0 :(得分:2)

另外根据文档,“范围为@Singleton的Bean没有代理对象。客户端直接引用单例实例。”知道了这一点,您应该能够通过检查注入对象的身份并将其与不使用@New的位置进行比较来找到自己的答案。

您也可以在@Singleton中添加一个@PostConstruct方法,看看它是否被调用了两次。

另外,文档警告@New已弃用:“@New限定符在CDI 1.1中已弃用。鼓励CDI应用程序注入@Dependent范围bean。”

另见: