目前,我正在使用静态单例来获取 Guice 3.0 通过 DI 为我构建的单例服务 - 我认为这是一个可怕的 hack,而不是使用 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;
}
}
但是,我不太确定如何解决这个问题,因为我至少在四个不同的地方需要该服务:
- Stripes ActionBeans - 我认为Stripes Guice 插件可以帮助我,我确实连接了它,但最终得到了多个并行的 MyServices
- ServletContextListener - 我认为Guice Servlet 模块可能会有所帮助,尽管我在文档中苦苦挣扎,因为它主要讨论用 Guice 配置替换 web.xml(此时不是我的优先事项)并将 HttpServletRequests 注入 Guice 构造的对象(再次不是我想做的)
- Quartz Jobs - 在这里我找到了一些相关的东西,但不确定它是否最终不会仍然创建一个“平行”的 MyService 到其他的
- 批处理从命令行运行 - 这是简单的部分
MyService 服务旨在成为单例(它拥有开放的 DB/MQ 连接等的其他服务,因此创建多个这样的服务会很糟糕)。
是否有一些简单的方法可以在我缺少的 Guice 中执行此操作?