簡體   English   中英

EJB bean生命周期依賴項?

[英]EJB bean lifecycle dependencies?

在規范中找不到關於使用@EJB或@Inject進行依賴項注入如何與容器的bean生命周期管理進行交互的清晰說明。

我想將單例bean A注入到單例bean B中。我希望容器確保在調用B的@PostConstruct方法時A存在,並且一直存在直到B的@PreDestroy方法完成為止。

  1. @Inject(CDI注入)會完成此任務嗎?
  2. @EJB呢?
  3. 還是我總是需要添加@DependsOn?

CDI和EJB是兩個不同的規范。 CDI提供了集成,使您可以像使用CDI一樣使用EJB Bean(反之亦然!)。 因此,請注意您是在使用CDI還是EJB,因為並非所有注釋都適用於所有bean。 例如,@ @Singleton (EJB)可以具有@Startup ,而CDI中的@ApplicationScoped bean則不能。

您提到的是“單粒豆”。 為了消除混亂,在EJB中表示@Singleton ,在CDI中表示@ApplicationScoped bean。

話雖這么說,對你的問題:

  1. @Inject(CDI注入)會完成此任務嗎?

@Inject應該工作以及只要你使用它來創建這些bean中的非循環依賴-例如,如果你使用@Inject在一個bean的構造函數,CDI將首先啟動的依賴比這個bean嘗試使用。 請記住,盡管CDI懶惰地啟動事情-在您實際嘗試使用該bean之前什么也不會發生。

  1. @EJB呢?

不知道你的意思在這里是什么- @EJB是EJB相當於@Inject在CDI。

  1. 還是我總是需要添加@DependsOn?

這也將是一個選項,但是再次注意,它只能在EJB @Singleton Bean上使用(這很好,在這里僅表示CDI與EJB的區別)。

  1. 注入(CDI)不屬於EJB規范。 這可能是特定於供應商的行為。 將EJB注入與EJB一起使用。 CDI規范的這一部分可能會有所幫助: cdi規范:與其他規范的關系

  2. 和3.參見EJB Spec 3.2章節4.8.1:單例會話Bean初始化。 您沒有對初始化進行任何說明(急切或在啟動時),因此請參考文檔以獲取詳細信息。

在某些情況下,應用程序中的多個單例會話bean組件之間存在顯式的初始化排序依賴性。 DependsOn批注用於表達這些依賴性。 在一個單例會話Bean必須在一個或多個其他單例會話Bean之前初始化的情況下,使用DependsOn依賴項。 容器確保在調用PostConstruct方法之前已初始化與單例會話Bean具有DependsOn關系的所有單例會話Bean。

請注意,如果一個單例會話bean僅需要從其PostConstruct方法調用另一個單例會話bean,則不需要顯式的排序元數據。 在那種情況下,第一個單例會話Bean將僅使用EJB引用來調用目標單例會話Bean。 在這種情況下,(通過注入或查找)獲取EJB引用不一定意味着實際創建了相應的單例會話bean實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM