ServletContextListenerはGuiceではなくサーバーによって作成されるため、連携させる方法を見つけることができません。ServletContextListenerでguiceインジェクターを取得するにはどうすればよいですか?
たぶん、ロガーや永続性などのサービスをシャットダウンしてから、contextDestroyedメソッドで実行し、contextInitializedで初期化するより良い方法がありますか?
ServletContextListenerはGuiceではなくサーバーによって作成されるため、連携させる方法を見つけることができません。ServletContextListenerでguiceインジェクターを取得するにはどうすればよいですか?
たぶん、ロガーや永続性などのサービスをシャットダウンしてから、contextDestroyedメソッドで実行し、contextInitializedで初期化するより良い方法がありますか?
拡張GuiceServletは、インジェクターをサーブレットコンテキストに配置するため、次のように実行することでインジェクターを取得できます。
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent sce) {
Injector injector = (Injector) sce.getServletContext()
.getAttribute(Injector.class.getName());
}
}
GuiceServletContextListenerクラスを拡張することで簡単に行うことができます。次に例を示します。
public class MyServletConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new MyGuiceModule(), new MyGuiceServletModule());
}
}
ここで、MyGuiceModuleは通常のGuiceModuleであり、ServletModuleはサーブレットのものです。Servlet-Containerにはメインのメソッドはありませんが、モジュールをサーブレットコンテナに渡す必要があります。そうすれば、guiceはサーブレットコンテナ内の通常のインジェクションモジュールを管理できます。