ClickでGuiceの連携
こんな感じ。
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のお作法に従うことができないこと。