現時点では、静的シングルトンを使用して、Guice 3.0 が DI を介して構築するシングルトン サービスを取得しています。これはひどいハックであり、DI に Guice を使用する意図された方法ではまったくなく、単体テストを複雑にしています。
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;
}
}
ただし、少なくとも 4 つの異なる場所でそのサービスが必要なため、それを修正する方法がよくわかりません。
- Stripes ActionBeans - Stripes Guice プラグインが役立つと思います。接続はしましたが、最終的に複数の並列 MyServices が作成されました。
- ServletContextListener - Guice Servlet モジュールが何らかの形で役立つ可能性があると思いますが、web.xml を Guice 構成に置き換えること (この時点では私の優先事項ではありません) と HttpServletRequests を Guice で構築されたオブジェクトに注入すること (再びやりたいことではない)
- Quartz Jobs - ここで関連するものを見つけましたが、他のものと「並列」の MyService を作成することになるかどうかはわかりません
- コマンドラインからバッチプロセスを実行 - これは簡単な部分です
MyService サービスはシングルトンであることを意図しています (開いている DB/MQ 接続などを所有する他のサービスであるため、これらを複数作成するのは適切ではありません)。
私が見逃しているGuiceでこれを行う簡単な方法はありますか?