2015-09-04 49 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层紧密集成等。