我使用支持CDI 1.2的焊接2.3.5。我遇到了一个问题,即容器(@javax.inject.Singleton
)忽略了注释为bean-discovery-mode="annotated"
的CDI bean。
谷歌搜索后,我仍然无法找到有关单身人士和CDI 1.2的信息。任何人都可以解释这种情况,并举例说明如何使用CDI 1.2制作单例CDI bean。
答案 0 :(得分:2)
当discovery-mode = annotated时,Weld不识别具有@Singleton
的bean,因此不会加载它们,因为@Singleton
不是正常范围。
如果你想要一个带CDI的Singleton,请使用 @ApplicationScoped
答案 1 :(得分:2)
使用bean发现模式annotated
,CDI将只接收使用所谓的 bean定义注释注释的bean。 spec clearly defines these正如您所料,@Singleton
不在其中。
要使您的单身人士可识别,最简单的方法是使用发现模式all
,但我想您要避免这种情况。在这种情况下,也许可以使用扩展来注册单例的注释类型 - CDI应该可以从那里获取。
然后,CDI @Singleton
的使用非常有限/特定,因为它是非代理伪范围。 在大多数情况下,@ApplicationScoped
将完全符合您的要求,因此请确保在进行任何额外工作之前考虑这一点。
答案 2 :(得分:0)
好的,这是一个老问题,可能我的解决方案来不及了:)
只需创建这样的构造型:
@Stereotype
@Singleton
@Target( TYPE )
@Retention( RUNTIME )
@interface SingletonBean
{
}
...并像这样使用它:
@SingletonBean
class MyBean
{
}
这样,将在bean-discovery-mode="annotated"
时发现MyBean;不涉及代理。