目前我正在使用静态单例来获取Guice 3.0通过DI为我构建的单例服务 - 我相信这是一个可怕的黑客攻击并且根本没有将Guice用于DI的预期方式,并使单元测试变得复杂
public class ServiceProvider {
private static ServiceProvider instance = new ServiceProvider();
private MyService myService;
public ServiceProvider() {
Injector myInjector = Guice.createInjector(new MyModule());
myService = noobmeterInjector.getInstance(MyService.class);
}
public static MyService getMyService() {
return instance.myService;
}
}
但是,我不太清楚如何解决这个问题,因为我至少需要在四个不同的地方提供这项服务:
MyService服务旨在成为一个单独的服务(它拥有开放式DB / MQ连接等的其他服务,因此创建其中的多个服务会很糟糕)。
在Guice中有一些简单的方法可以解决这个问题吗?
答案 0 :(得分:0)
因此,您的代码段存在一些问题。
ServiceProvider
基本上是一个服务定位器实现,因为您使用的是Guice,所以这是不必要的。 Injector
创作“高”。服务器启动的main
方法是一个好地方。 我添加了一些代码来演示。
public class Server {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new MyModule());
// Your code here.
}
}
public class MyModule extends AbstractModule {
protected void configure() {
// Assuming MyService implements Service
bind(Service.class).to(MyService.class).in(Singleton.class);
}
}