到处都有关于Stateless、Stateful 和Sigleton bean 的大量信息,但几乎没有关于 javax.annotation.ManagedBean 的信息。 强>。乍一看,我认为它类似于 Spring's @Component
但是没有完整的信息我不能使用它。
- 如果我用
@javax.annotation.ManagedBean
注释一个类它是单例还是像无状态一样有实例池? - 此类中的方法是否是并发的?我应该确保在单例中它们在默认情况下是同步的。
- 我正考虑用这个来注释我的 DAO 类,但是
@javax.enterprise.context.*;
范围让我怀疑。我想@Stateless
会更好。有什么意见吗? - 如果不在 DAO 或服务类上,这个注解适合放在哪里?
这answer给出了很好的解释,但没有回答上述问题。
最佳答案
都不是。它们是每个查找/注入(inject)实例,更像是有状态的。
不,没有容器管理的并发。
(和 4.)您是否需要事务、安全或其他 EJB 功能?然后
@Stateless
可能更好。否则,我只会使用 CDI,因为它几乎在所有方面都优于@javax.annotation.ManagedBean
注释,并且它在 EE 7 中默认启用,因此它显然是 future 的前进方向EE.
作为一点背景,@javax.annotation.ManagedBean
注释是在 EE 6 周期的开发后期添加的,并且没有被广泛使用。托管 bean 规范旨在统一 EJB、CDI 和 JSF 托管 bean 组件模型的生命周期、注入(inject)和命名行为。这很有用,但在我看来,@javax.annotation.ManagedBean
注释只是事后的想法,它允许开发人员访问最小的组件模型功能,而无需其他组件模型(EJB 必须有一组固定的所需服务和相关开销,CDI 几乎在所有方面都更好,但显然更复杂,并且 JSF 托管 bean 与 WAR 绑定(bind))。然而,这个“共同点”是一个非常有限的组件模型,只有@PostConstruct、@Resource(和其他 EE 注入(inject))和@Interceptors。没有安全、事务、作用域/生命周期(如在 EJB 或 CDI 中)、@PreDestroy、与 Web 层的紧密集成等。
关于java - ejb - javax.annotation.ManagedBean 所需的详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32400686/