我有一个名为Legacy的现有类,主要是用旧式单例模式编写的。现在我想介绍一个新的领域,我想用Guice。 Legacy本身不受Guice控制,它被另一个Service类使用(在Service类中,它调用Legacy类的getInstance()以立即检索Legacy对象),并且该Service类是使用Guice注入器创建的。如何在现有的单例类中使用guice注入?
public class Legacy {
public synchronized static Legacy getInstance() {
if(sInstance == null) {
sInstance = new Legacy();
}
return sInstance;
}
private Legacy() {
legacyObj = LegacyField.getInstance(); // get a singleton
}
private static Legacy sInstance;
private LegacyField legacyObj;
private NewField newObj; // this is the new dependency I would like to add using Guice
}
我想那是什么我试图把方法注入到传统类
@Inject
public void setNewField(NewField newObj) {
this.newObj = newObj;
}
而且在服务的模块文件,我绑定了新野物,但是当我运行该程序,它抛出了NullPointer异常。所以注射不起作用。关于如何让NewField注入我的程序的任何想法,但保持目前的老派单身模式,而不是改变太多的一切?
编辑 下面至少有三个解决方案,我不知道哪个是最好的或他们是否等价。
这三种解决方案或多或少都是相同的。他们都直接或间接地调用'injectMembers'在你的单身人士身上。 –