我有一个单例类,它有一个私有默认构造函数和一个公共实例 - getter,如下所示:
public class MyClass {
private static MyClass INSTANCE = new MyClass();
private MyClass() {}
public static MyClass getInstance() {
return INSTANCE;
}
}
有没有办法使用CDI为这个类启用依赖注入,还告诉容器使用getInstance()方法返回的值?并非每个访问该类的应用程序都在servlet容器中,因此在这些情况下仍然需要使用实例获取方法。
答案 0 :(得分: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。基本上是免费的单身人士。
答案 1 :(得分:0)
您也可以使用制作人
@Produces @ApplicationScoped
private static MyClass INSTANCE = new MyClass();
然后当你@Inject MyClass myClass
时它可以作为bean使用,但是你应该把它切换成一个完整的托管bean。
答案 2 :(得分:0)
CDI中有一个@Singleton刻板印象。使用此方法,而不是使用生产者或任何其他方式模拟此行为。
@Named
@Singleton
public class MyClass {
@Inject
private Foo injectedFoo;
}
完成!没有别的需要。