2015-09-04 23 views
2

細節有很多有關無狀態,狀態Sigleton豆到處但幾乎一無所知javax.annotation.ManagedBean。在第一次看,我認爲這是類似於Spring's @Component但我不能使用它沒有完整的信息。EJB - requried上javax.annotation.ManagedBean

  1. 如果我用@javax.annotation.ManagedBean註解一個類,它會是單例還是會有無狀態的實例池?
  2. 這樣的類中的方法是併發的嗎?我應該確保它們在默認情況下是同步的。
  3. 我正在考慮用這個註釋我的DAO類,但@javax.enterprise.context.*;範圍讓我懷疑。我認爲@Stateless會更好。任何意見?
  4. 如果不在DAO或服務類別上,此註釋適用於何處?

這個answer給出了非常好的解釋,但沒有回答上述問題。

回答

2
  1. 也沒有。它們是每個查找/注入實例,更像有狀態。

  2. 不,沒有容器管理的併發。

  3. (和4.)您是否需要事務,安全性或其他EJB功能?然後@Stateless可能會更好。否則,我會使用CDI,因爲它幾乎在所有方面都比@javax.annotation.ManagedBean註釋更好,並且它在EE 7中默認啓用,所以它顯然是EE的前進方向。

作爲位背景的,是在EE 6週期的後期發展加入@javax.annotation.ManagedBean註釋,並且它沒有被廣泛使用。託管bean規範旨在統一EJB,CDI和JSF託管bean組件模型的生命週期,注入和命名行爲。這很有用,但在我看來,@javax.annotation.ManagedBean註釋僅僅是允許開發人員訪問最小組件模型功能而沒有其他組件模型的開銷/複雜性(真實或感知)的事後考慮(EJB必須有一組固定的服務和相關的開銷,CDI在幾乎所有方面都更好,但顯然更復雜,而且JSF託管bean與WAR綁定)。然而,這個「公分母」是一個非常有限的組件模型,只有@PostConstruct,@Resource(和其他EE注入)和@Interceptors。沒有安全性,事務,範圍/生命週期(如EJB或CDI),@PreDestroy,與Web層緊密集成等。