Java ejbbean生命周期依赖关系?
我在规范中找不到任何关于@EJB或@Inject的依赖注入如何与容器的bean生命周期管理交互的明确声明 我想将单例bean A注入到单例bean B中。我想让容器保证A在调用B的@PostConstruct方法时存在,并在B的@PreDestroy方法完成之前继续存在Java ejbbean生命周期依赖关系?,java,ejb,cdi,Java,Ejb,Cdi,我在规范中找不到任何关于@EJB或@Inject的依赖注入如何与容器的bean生命周期管理交互的明确声明 我想将单例bean A注入到单例bean B中。我想让容器保证A在调用B的@PostConstruct方法时存在,并在B的@PreDestroy方法完成之前继续存在 @Inject(CDI-injection)能实现这一点吗 @EJB呢 还是我总是需要添加@DependsOn 注入(CDI)不是EJB规范的一部分。这可能是特定于供应商的行为。在EJB中使用EJB注入。CDI规范的这一部分可能
CDI和EJB是两种不同的规范。CDI提供了集成,允许您像使用CDI一样使用EJB bean(但反之亦然!)。所以请注意,您所说的是CDI还是EJB,因为并非所有注释都适用于所有bean。例如,
@Singleton
(EJB)可以有@Startup
,而来自CDI的@ApplicationScoped
bean不能
你提到的是“单身豆”。为了消除混淆,在EJB中表示@Singleton
,在CDI中表示@ApplicationScoped
bean
尽管如此,对于您提出的问题:
@Inject
在这些bean之间创建一个非循环依赖项,@Inject
也应该可以工作-例如,如果您在一个bean的构造函数中使用@Inject
,CDI将首先启动依赖项,而不是该bean试图使用的依赖项。请记住,CDI是在懒散地启动事情——除非您真正尝试使用该bean,否则不会发生任何事情
@EJB
是CDI中的@Inject
的EJB等价物
这也是一个选项,但请再次注意,这只能用于EJB
@Singleton
bean(这很好,这里只表示CDI与EJB的区别)。选项三。我想。