我试图定义一个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
个实例?
答案 0 :(得分:2)
另外根据文档,“范围为@Singleton的Bean没有代理对象。客户端直接引用单例实例。”知道了这一点,您应该能够通过检查注入对象的身份并将其与不使用@New的位置进行比较来找到自己的答案。
您也可以在@Singleton中添加一个@PostConstruct方法,看看它是否被调用了两次。
另外,文档警告@New已弃用:“@New限定符在CDI 1.1中已弃用。鼓励CDI应用程序注入@Dependent范围bean。”
另见: