【发布时间】:2017-04-14 00:02:52
【问题描述】:
我有一个名为 Legacy 的现有类,它主要是用老式单例模式编写的。现在我想为它引入一个新领域,我想使用 Guice。 Legacy 本身不受 Guice 控制,它被另一个 Service 类使用(在 Service 类内部,它现在调用 Legacy 类的 getInstance() 来检索 Legacy 对象),并且该 Service 类是使用 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 放入 Legacy 类
@Inject
public void setNewField(NewField newObj) {
this.newObj = newObj;
}
并且在Service的模块文件中,我绑定了NewField对象,但是当我运行程序时,它抛出了一个NullPointer异常。所以注入不起作用。知道如何将 NewField 注入到我的程序中,同时保持当前的老式单例范式,并且不对其他所有内容进行太多更改吗?
编辑 下面至少有三个解决方案,我不太清楚哪个是最好的或者它们是否等效。
【问题讨论】:
-
这 3 种解决方案或多或少是等效的。他们都在你的单身人士身上(直接或间接)打电话给
injectMembers。
标签: java dependency-injection guice