我想用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。 –