新的JSR 299「用於Java EE的上下文和依賴注入」似乎基於「範圍」的概念。如果沒有Web層並且沒有HTTP會話,CDI是否有意義?
將豆創建和相關聯的所支持的作用域之一:應用程序,會話(映射到HTTP會話),會話,並且請求。
如果沒有HTTP會話(例如,通過EJB遠程處理公開功能的企業應用程序)使用CDI是否有意義,因爲受管Bean不會與任何上下文相關聯(因爲它們不存在)?
在這種情況下甚至可以使用CDI嗎?它會帶來哪些好處?
新的JSR 299「用於Java EE的上下文和依賴注入」似乎基於「範圍」的概念。如果沒有Web層並且沒有HTTP會話,CDI是否有意義?
將豆創建和相關聯的所支持的作用域之一:應用程序,會話(映射到HTTP會話),會話,並且請求。
如果沒有HTTP會話(例如,通過EJB遠程處理公開功能的企業應用程序)使用CDI是否有意義,因爲受管Bean不會與任何上下文相關聯(因爲它們不存在)?
在這種情況下甚至可以使用CDI嗎?它會帶來哪些好處?
這讓我想起我自己的問題,我問前段時間:How does @SessionScoped work with EJB? Is CDI only for web-tier?
看來的「範圍」的想法只在HTTP會話的情況是相關的。
但是,我可以看到有效使用@ApplicationScoped
範圍作爲實現應用程序單例bean的方式,儘管請求是HTTP請求。
Javadoc說:
應用範圍是活躍:
(...)
- 任何Java EE Web服務調用期間
,
- 期間的任何
任何EJB的任何異步方法調用期間,遠程方法調用任何EJB任何調用到EJB 超時方法和消息傳遞到任何EJB消息驅動bean的 期間,
您也可以創建自己的作用域。 CDI具有很強的可擴展性,可用於各種情況。它也被用在沒有HttpSession和HttpRequest的SE應用程序中。
除此之外,CDI不僅是生命週期同治,你可以用它做的依賴注入從而在一個非常乾淨的方式分離,它們的實現接口。您還可以使用攔截器和裝飾器執行一些AOP技術,或利用CDI事件構建非常鬆散的Observer模式。