gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:39:40 24 4
gpt4 key购买 nike

我在规范中找不到任何关于 @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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com