我想用Guice作爲其中一個組件的非靜態實例方法(非託管bean應該可以訪問這個類)。我創造了這樣的事情:Guice的實例方法
public class LookupService {
@Inject
private static Provider<Injector> injector = null;
private final ILookup<IWS> lookup;
@Inject
public LookupService(ILookup<IWS> lookup) {
this.lookup = lookup;
}
public static LookupService instance() {
return injector.get().getInstance(LookupService.class);
}
public <T extends IWS> T lookup(Class<T> localInterface) {
return lookup.lookup(localInterface);
}
}
你怎麼看待這樣的設計是什麼?有關於此的任何其他想法? (從非管理對象訪問託管bean)
好的答案! +1 –
感謝您撰寫!我有類似的情況,你在第二點(舊代碼庫)中描述。隨着時間的推移,我將嘗試遷移到沒有靜態的方法。 這種方法恕我直言,但測試並沒有那麼糟糕,但需要Guice集成到測試框架。然後,當你想測試調用'LookupService.instance()'的類時,你需要在測試開始時爲它綁定模擬實現。 – sol25
@ sol25請記住,基於Guice的系統測試是很好的,但是你也可能發現單元測試也是非常有用的,尤其是使用_mock_ LookupService的bean測試。放寬靜態字段可見性可能會讓你完全在大部分測試中跳過Guice。 –