java ee cdi_Java EE CDI bean范围
java ee cdi
Java EE平臺的上下文和依賴注入(CDI)是一項功能,有助于將Java EE平臺的Web層和事務層綁定在一起。 CDI是一組服務,可以一起使用,使開發人員可以輕松地在Web應用程序中使用企業bean和JavaServer Faces技術。
在CDI中,bean是定義應用程序狀態和/或邏輯的上下文對象的源。 如果容器可以根據CDI規范中定義的生命周期上下文模型來管理其實例的生命周期,則Java EE組件就是Bean。
托管bean是由Java類(稱為其bean類)實現的。 如果任何其他Java EE技術規范(例如JavaServer Faces技術規范)將頂級Java類定義為托管bean,則該頂級Java類為托管bean。
當我們需要使用在Web應用程序中注入另一個bean類的bean時,該bean需要能夠在用戶與應用程序交互期間保持狀態。 定義此狀態的方法是給Bean一個范圍。 范圍為對象提供了明確定義的生命周期上下文。 有作用域的對象可以在需要時自動創建,并在創建對象的上下文結束時自動銷毀。 而且,其狀態由在相同上下文中執行的所有客戶端自動共享。
當我們創建作為托管bean的Java EE組件時,它將成為有作用域的對象,該對象存在于定義良好的生命周期上下文中。 下表列出了CDI提供的范圍:
1.請求– @RequestScoped
此范圍描述了單個HTTP請求中用戶與Web應用程序的交互。 @RequestScoped注釋的bean的實例具有HTTP請求生命周期。
2.會話– @SessionScoped
此范圍表示用戶跨多個HTTP請求與Web應用程序的交互。
3.應用程序– @ApplicationScoped
在這種情況下,狀態在所有用戶與Web應用程序的交互中共享。 容器為所有客戶端請求提供了@ApplicationScoped注釋的Bean的相同實例。
4.對話– @ConversationScoped
此范圍描述了用戶與JavaServer Faces應用程序之間的交互,該交互在顯式的開發人員控制的邊界內進行,該邊界將范圍擴展到JavaServer Faces生命周期的多次調用。 所有長時間運行的對話都限于特定的HTTP Servlet會話,并且可能不會跨越會話邊界。
注意,使用ConversationScoped Bean,我們可以從ViewScoped JSF Bean中獲得所需的相同功能。 此外,借助ConversationScoped Bean,我們可以在不同的頁面請求之間維護相同的對話(或狀態)。 但是,當我們不進行對話時,托管Bean將保持活動狀態直到超時。
需要注意的是,使用會話或會話范圍的bean必須可序列化。 這是因為容器會不時地鈍化HTTP會話,因此當再次激活該會話時,必須檢索Bean的狀態。
5. Singleton – @Singleton偽作用域
這是一個偽作用域。 它定義了一次實例化bean。 當將CDI托管bean注入另一個bean中時,CDI容器將使用代理。 代理是處理對bean的調用的代理。 但是,@ @Singleton注釋的bean沒有代理對象。 客戶端直接引用單例實例。 那么,當客戶端被序列化時會發生什么? 我們必須確保單例bean保持單例。 為此,有幾種方法,例如,讓單例bean實現writeResolve()和readReplace() (由Java序列化規范定義),確保客戶端僅保留對單例bean的臨時引用,或者給出客戶端對Instance<X>類型的引用,其中X是單例bean的bean類型。
6. Dependent – @Dependent偽作用域
該偽作用域意味著存在一個對象,該對象恰好服務于一個客戶端(bean),并且具有與該客戶端(bean)相同的生命周期。 這是未顯式聲??明作用域類型的bean的默認作用域。 從屬bean的實例永遠不會在不同客戶端或不同注入點之間共享。 嚴格來說,它是某些其他對象的從屬對象。 它在創建屬于它的對象時被實例化,而在它屬于它的對象被破壞時被實例化。
除@Dependent外,所有預定義范圍都是上下文范圍。 CDI將上下文范圍的bean放置在其生命周期由Java EE規范定義的上下文中。 例如,會話上下文及其bean在HTTP會話的生存期內存在。 對bean的注入引用是上下文相關的。 引用始終適用于與進行引用的線程的上下文相關聯的Bean。 CDI容器確保在為這些對象指定的范圍所確定的正確時間創建和注入對象。
您還可以定義和實現自定義范圍。 實施和擴展CDI規范的人員可以使用它們。
這是CDI提供的所有bean范圍的教程。 參考文獻:
- Seam框架參考文檔
- Java EE 6教程
翻譯自: https://www.javacodegeeks.com/2013/04/java-ee-cdi-bean-scopes.html
java ee cdi
總結
以上是生活随笔為你收集整理的java ee cdi_Java EE CDI bean范围的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为“Mate60 Pro”商标被抢注
- 下一篇: 辆组词很多 辆组词有哪些