簡體   English   中英

如何在CDI 1.2中制作單例

[英]How to make a singleton in CDI 1.2

我使用支持CDI 1.2的焊接2.3.5。 我遇到了一個問題,容器會忽略使用@javax.inject.Singleton注釋的CDI bean( bean-discovery-mode="annotated" )。

谷歌搜索后,我仍然找不到有關單例和CDI 1.2的信息。 任何人都可以解釋這種情況,並舉例說明如何使用CDI 1.2制作單例CDI bean。

當發現模式=帶注釋時,Weld不會使用@Singleton標識bean,因此不會加載它們,因為@Singleton不是正常范圍。

如果要使用CDI的Singleton,請使用@ApplicationScoped

annotated bean發現模式的情況下,CDI將僅拾取使用所謂的bean定義注釋進行注釋的bean 規范清楚地定義了這些 ,正如您所期望的,@ @Singleton不在其中。

要使您的單身人士易於辨認,最簡單的方法是all使用發現模式,但我想您想避免這種情況。 在這種情況下,也許可以使用擴展名來注冊您的單身人士的注釋類型-CDI應該能夠從那里接管。

再說一次,CDI @Singleton的使用非常有限/特定,因為它是一個非代理偽作用域。 在大多數情況下,@ @ApplicationScoped無論如何都會做您想做的事情,因此請確保在進行任何其他工作之前先考慮一下。

好的,這是一個老問題,可能我的解決方案來不及了:)

只需創建一個這樣的構造型:

@Stereotype
@Singleton
@Target( TYPE )
@Retention( RUNTIME )
@interface SingletonBean
{
}

...並像這樣使用它:

@SingletonBean
class MyBean
{
}

這樣,將在bean-discovery-mode="annotated"bean-discovery-mode="annotated" MyBean; 不涉及代理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM