如果在同一個會話中我實例化了多個 SessionScoped Bean 或 EJB(第一次通過容器注入,第二次通過“new”創(chuàng)建)會發(fā)生什么?它會拋出錯誤嗎?如果不是,在注射過程中將使用它們中的哪些?AppllicationScoped 和 RequestScoped 也一樣?!PS 類沒有任何注釋,但給它們一個明確的名稱。
1 回答

三國紛爭
TA貢獻(xiàn)1804條經(jīng)驗 獲得超7個贊
要擁有真正托管的 bean,您需要讓 CDI 處理生命周期,包括創(chuàng)建。也有例外,但我們現(xiàn)在不討論。
對于您的情況,通過創(chuàng)建的對象new
將根本不是托管 bean,CDI 不會知道它(除非它是某種生產(chǎn)者方法等的結(jié)果)。你應(yīng)該弄清楚為什么要創(chuàng)建它而不是僅僅注入現(xiàn)有的?
AppllicationScoped 和 RequestScoped 也一樣?!
對于普通作用域 bean 的每個注入點,CDI 將查看底層“bean 存儲”并查看您想要的 bean 是否已經(jīng)創(chuàng)建并存儲在那里。如果是這樣,它只會向您返回那個(或者,好吧,它的代理)。如果沒有,它將創(chuàng)建一個新的并將其存儲在那里以供將來參考。
所以簡短的回答是,你不會有兩個由 CDI 創(chuàng)建的同一個普通作用域 bean 的實例。
添加回答
舉報
0/150
提交
取消