我有一个单例类,它有一个私有的默认构造函数和一个公共的实例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;
}
完成了!