2016-11-14 64 views
0

我有了一個私人默認構造函數和一個公共實例的getter一樣遵循一個單例類:Java的CDI和私有的構造

public class MyClass { 
    private static MyClass INSTANCE = new MyClass(); 

    private MyClass() {} 

    public static MyClass getInstance() { 
     return INSTANCE; 
    } 
} 

有沒有辦法使用CDI,使依賴注入該等級的方式,還要告訴容器使用從getInstance()方法返回的值?並非每個訪問該類的應用程序都將位於一個servlet容器中,因此在這些情況下仍需要使用實例獲取方法。

+0

你使用Spring嗎? –

+0

不在這個應用程序 – Nixx

+0

你什麼時候得到@Model註解(庫)? –

回答

0

我想你想使用CDI。請嘗試以下操作:

@ApplicationScoped 
@Named //necessary only if you want to refer to by name binding on JSF 
public class MyClass { 
    @PostConstruct 
    public void afterCreate() { 
     System.out.println("Object created"); 
    } 
} 

這樣,您將爲整個應用程序擁有一個@Inject -able CDI bean。本質上是一個單身免費。

0

您可以使用那麼它作爲一個bean提供一個製片人以及

@Produces @ApplicationScoped 
private static MyClass INSTANCE = new MyClass(); 

當你@Inject MyClass myClass,但你真的應該切換它是一個完整的託管Bean。

0

CDI有一個@Singleton刻板印象。使用這個,而不是模仿生產者或任何其他方式的這種行爲。

@Named 
@Singleton 
public class MyClass { 
@Inject 
private Foo injectedFoo; 

} 

完成!沒有其他需要。