ClickでGuiceの連携

yyamano2009-02-03


こんな感じ。

public class MyClickServlet extends ClickServlet {
    private Injector injector;

    @Override
    public void init() throws ServletException {
        super.init();
        injector = Guice.createInjector(new FooModule());
    }

    @SuppressWarnings("unchecked")
    @Override
    protected Page newPageInstance(String path, Class pageClass, HttpServletRequest request) throws Exception {
        return injector.getInstance((Class<? extends Page>)pageClass);
    }
}

URLのマッピングGuiceにやらせず、HttpServlet*などをインジェクションしないのであれば、http://d.hatena.ne.jp/itoasuka/20070614/1181800165 のようなServletModule、GuiceFilterの設定は不要。
悩ましいのは、インジェクションされるクラスをPageクラスのコンストラクタの中で使う場合、コンストラクタインジェクションする必要があるので、Pageクラスのコンストラクタは引数なしというClickのお作法に従うことができないこと。