java - EJB bean 生命周期依赖关系?

标签 java ejb cdi

我在规范中找不到任何关于 @EJB 或 @Inject 的依赖注入(inject)如何与容器的 bean 生命周期管理交互的明确声明。

我想将单例 bean A 注入(inject)单例 bean B。我希望容器保证 A 在调用 B 的 @PostConstruct 方法时存在,并继续存在直到 B 的 @PreDestroy 方法完成后。

  1. @Inject(CDI 注入(inject))会实现这一目标吗?
  2. @EJB 怎么样?
  3. 或者我总是需要添加@DependsOn?

最佳答案

CDI和EJB是两种不同的规范。 CDI 提供集成,允许您像使用 CDI 一样使用 EJB bean(但反之则不然!)。因此请注意您是在谈论 CDI 还是 EJB,因为并非所有注释都适用于所有 bean。例如@Singleton (EJB)可以有@Startup ,而@ApplicationScoped CDI 的 bean 不能。

您提到的是“singleton bean”。为了消除困惑,在 EJB 中这意味着 @Singleton ,在 CDI 中这意味着 @ApplicationScoped bean 。

话虽如此,对于您的问题:

  1. @Inject(CDI 注入(inject))会实现这一目标吗?

@Inject只要您使用它在这些 bean 之间创建非循环依赖关系,就应该可以正常工作 - 例如如果您使用 @Inject在一个 bean 的构造函数中,CDI 将首先启动该 bean 尝试使用的依赖关系。请记住,CDI 是懒惰地启动事情的——直到您真正尝试使用该 bean 之前什么也不会发生。

  • @EJB 怎么样?
  • 不确定你的意思 - @EJB是 EJB 等效项 @Inject在 CDI 中。

  • 或者我总是需要添加@DependsOn?
  • 这也是一个选项,但再次注意,这只能在 EJB @Singleton 上使用beans(这完全没问题,只是在这里表示 CDI 与 EJB 的差异)。

    关于java - EJB bean 生命周期依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53018377/

    相关文章:

    java - 如何使用 JFreeChart 将数组中的数据绘制成图表?

    java - 如何从我的代码程序中修复此错误

    java - Selenium 网络驱动程序 : best practice to handle a NoSuchElementException

    java - Wildfly 和自动重新连接到数据库

    jakarta-ee - 来自不同 JRE 和服务器版本的远程 EJB 调用

    java - 泛型和限定符

    java - Weld 和测试 jar

    java - 不使用重量级框架如何解决Jar hell?

    jakarta-ee - 在 WildFly 中取消部署时,静态字段通常会被卸载吗?

    jakarta-ee - 未从单例 EJB 接收到 CDI 事件