共享Guice AbstractModule和Servlet模块之间的绑定

时间:2014-03-25 12:40:21

标签: java dependency-injection guice

我有一个应用程序既可以作为胖罐运行,也可以作为战争运行在容器中。我正在使用一个Guice模块,它在胖子方面扩展AbstractModule,在战争方面扩展ServletModule

由于所有绑定都是相同的,我宁愿不在ServletModule重复自己。是否有合适的方式在它们之间共享代码?

2 个答案:

答案 0 :(得分:1)

还有另一种解决方案:

public class MyGuiceServletConfig extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(
            new ServletModule() {
                @Override
                protected void configureServlets() {
                    install(new MyGuiceModule());

                    serve("*").with(Test.class);
                    bind(Test.class).in(Singleton.class);
                }
            }
        );
    }
}

这样您就可以创建使用其他模块的单个模块。有时这更具可读性。

答案 1 :(得分:0)

事实证明,解决方案非常简单:

public class MyGuiceModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(Foo.class).in(Singleton.class);
    }
}

public class MyGuiceServletConfig extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(
            new ServletModule() {
                @Override
                protected void configureServlets() {
                    serve("*").with(Test.class);
                    bind(Test.class).in(Singleton.class);
                }
            },
            new MyGuiceModule()
        );
    }
}

由于这个很好的答案,我终于偶然发现了解决方案:Simple Example with Guice Servlets