我有一個名爲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'在你的單身人士身上。 –