首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EJB bean生命周期依赖关系?

EJB bean生命周期依赖关系?
EN

Stack Overflow用户
提问于 2018-10-27 03:02:34
回答 2查看 180关注 0票数 1

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

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

  1. @injection (CDI注入)会实现这一点吗?
  2. @EJB呢?
  3. 还是我总是需要添加@DependsOn?
EN

回答 2

Stack Overflow用户

发布于 2018-10-31 08:49:14

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

你说的是“单例豆”。只是为了消除混乱,在EJB中,意思是@Singleton,在CDI中,意思是@ApplicationScoped bean。

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

  1. @injection (CDI注入)会实现这一点吗?

只要您使用它在这些bean之间创建一个非循环依赖关系,@Inject也应该工作--例如,如果您在一个bean的构造函数处使用@Inject,CDI将首先启动该bean试图使用的依赖项。请记住,CDI是懒洋洋地发起的--除非您真正尝试使用该bean,否则不会发生任何事情。

  1. @EJB呢?

不清楚您在这里的意思-- @EJB是CDI中@Inject的一个等价的EJB。

  1. 还是我总是需要添加@DependsOn?

这也是一个选项,但请注意,这只能在EJB上使用(这非常好,这里只表示CDI与@Singleton之间的差异)。

票数 1
EN

Stack Overflow用户

发布于 2018-10-30 07:39:34

  1. 注入(CDI)不是EJB规范的一部分。这可能是特定于供应商的行为。在EJB中使用EJB注入。也许CDI规范的这一部分可能会有所帮助:cdi规范:与其他规范的关系
  2. 参见EJB 3.2,第4.8.1章: Singleton会话Bean初始化。您没有说任何关于初始化(热切或在启动时),所以请参考文档获得详细信息。

在某些情况下,应用程序中的多个单例会话bean组件之间存在显式初始化顺序依赖关系。DependsOn注释用于表示这些依赖项。如果一个单例会话bean必须在一个或多个其他单例会话bean之前初始化,则使用DependsOn依赖项。容器确保在调用DependsOn方法之前已经初始化了单例会话bean与其具有PostConstruct关系的所有单例会话bean。 注意,如果一个单例会话bean只需要从其PostConstruct方法调用另一个单例会话bean,则不需要显式排序元数据。在这种情况下,第一个单例会话bean只会使用EJB引用来调用目标单例会话bean。在这种情况下,获取EJB引用(无论是通过注入还是通过查找)并不一定意味着实际创建相应的单例会话bean实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53018377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档