![](/img/trans.png)
[英]What is the difference between @ApplicationScoped and @Singleton scopes in CDI?
[英]CDI @New on @Singleton objects. What it does?
我正在嘗試定義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
當需要它?
同樣根據文檔,“具有作用域@Singleton的Bean沒有代理對象。客戶端直接引用單例實例。” 知道這一點,您應該能夠通過檢查注入的對象的身份並將其與不使用@New的位置進行比較來為自己找到答案。
您也可以只將@PostConstruct方法添加到@Singleton中,看看它是否被調用過兩次。
順便說一句,文檔警告@New已被棄用:“ @New限定符在CDI 1.1中已棄用。鼓勵CDI應用程序注入@Dependent范圍內的bean。”
也可以看看:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.