2016-11-14 65 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; 

} 

完成!没有其他需要。