我有一个应用程序既可以作为胖罐运行,也可以作为战争运行在容器中。我正在使用一个Guice模块,它在胖子方面扩展AbstractModule
,在战争方面扩展ServletModule
。
由于所有绑定都是相同的,我宁愿不在ServletModule
重复自己。是否有合适的方式在它们之间共享代码?
答案 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。