Java CDI和私有构造函数



我有一个单例类,它有一个私有的默认构造函数和一个公共的实例getter,如下所示:

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

是否有一种方法可以使用CDI来启用该类的依赖注入,但也告诉容器使用getInstance()方法返回的值?并不是每个访问该类的应用程序都在servlet容器中,所以在这些情况下仍然需要使用实例获取方法。

我想你想使用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的CDI bean。实际上是一个免费的Singleton

也可以使用producer

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

当你@Inject MyClass myClass时,它作为一个bean可用,但是你应该把它转换成一个完全管理的bean。

CDI中有一个可用的@Singleton构造型。使用这个,而不是用生产者或任何其他方式模仿这个行为。

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

完成了!

最新更新