6

ServletContextListenerはGuiceではなくサーバーによって作成されるため、連携させる方法を見つけることができません。ServletContextListenerでguiceインジェクターを取得するにはどうすればよいですか?

たぶん、ロガーや永続性などのサービスをシャットダウンしてから、contextDestroyedメソッドで実行し、contextInitializedで初期化するより良い方法がありますか?

4

2 に答える 2

7

拡張GuiceServletは、インジェクターをサーブレットコンテキストに配置するため、次のように実行することでインジェクターを取得できます。

public class MyServletContextListener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        Injector injector = (Injector) sce.getServletContext()
                                          .getAttribute(Injector.class.getName());      
    }
}
于 2011-12-27T22:35:50.130 に答える
5

GuiceServletContextListenerクラスを拡張することで簡単に行うことができます。次に例を示します。

public class MyServletConfig extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new MyGuiceModule(), new MyGuiceServletModule());
    }
}

ここで、MyGuiceModuleは通常のGuiceModuleであり、ServletModuleはサーブレットのものです。Servlet-Containerにはメインのメソッドはありませんが、モジュールをサーブレットコンテナに渡す必要があります。そうすれば、guiceはサーブレットコンテナ内の通常のインジェクションモジュールを管理できます。

于 2012-04-27T14:20:23.667 に答える