java - ejb - javax.annotation.ManagedBean 所需的详细信息

标签 java java-ee-6 ejb-3.1

到处都有关于Stateless、StatefulSigleton bean 的大量信息,但几乎没有关于 javax.annotation.ManagedBean 的信息。 。乍一看,我认为它类似于 Spring's @Component 但是没有完整的信息我不能使用它。

  1. 如果我用 @javax.annotation.ManagedBean 注释一个类它是单例还是像无状态一样有实例池?
  2. 此类中的方法是否是并发的?我应该确保在单例中它们在默认情况下是同步的。
  3. 我正考虑用这个来注释我的 DAO 类,但是 @javax.enterprise.context.*;范围让我怀疑。我想@Stateless会更好。有什么意见吗?
  4. 如果不在 DAO 或服务类上,这个注解适合放在哪里?

answer给出了很好的解释,但没有回答上述问题。

最佳答案

  1. 都不是。它们是每个查找/注入(inject)实例,更像是有状态的。

  2. 不,没有容器管理的并发。

  3. (和 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/

相关文章:

java - 在Java中显示二叉搜索树

java - 无法使用robotium和私有(private)方法在android上截取屏幕截图

java - 在 Java EE 中创建 Netty 监听器

java - 如何有效地从数据库检索数据以填充 selectonemenu

glassfish - 严重 : EJB5070: Exception creating stateless session bean - solution with beans. xml

java - 使用可比较接口(interface)进行对象排序

java - 重定向到java ee 6中的restful url

jakarta-ee - 如何使用保留请求正文和响应正文的 servlet 过滤器记录请求和响应?

jakarta-ee - 当transaction属性为 "Required"时,为什么CMT在EJB方法的退出时提交?

Java内置日期操作和比较