有很多关于无状态,有状态和 Sigleton bean的信息,但几乎没有关于 javax.annotation.ManagedBean 的信息。初看起来,我认为它与Spring's @Component
类似,但如果没有完整的信息,我就无法使用它。
@javax.annotation.ManagedBean
注释一个类,它会是单例还是像无状态一样有实例池?@javax.enterprise.context.*;
范围让我怀疑。我认为@Stateless
会更好。有什么意见吗?这answer给出了非常好的解释,但没有回答上述问题。
答案 0 :(得分:2)
都不是。它们是每个查找/注入实例,更像是有状态。
不,没有容器管理的并发。
(和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层的紧密集成等。