如何让DI与Guice和Webapps一起使用?

时间:2011-07-01 00:52:21

标签: java web-applications dependency-injection guice

如何让DI在网络应用中运行?到目前为止,我已经完成了以下工作:

1)使用@Inject

注释setter方法

2)扩展AbstractModule,以便它将接口类绑定到在步骤1中注释了setter的属性的实现类

3)扩展GuiceContextServletListener并覆盖getInjector,使其返回Guice.createInjector(new ExtendedAbstractModule())

4)在GuiceContextServletListener注册扩展web.xml作为听众

我已经验证了在启动webapp时调用扩展的GuiceContextServletListener.getInjector()方法。注释了setter的属性没有被注入,并且仍然是null

2 个答案:

答案 0 :(得分:0)

你在setter上使用了什么注释?

我通常使用@Named注释来获取可以指向属性文件或单独设置的属性值。

http://code.google.com/p/google-guice/wiki/BindingAnnotations

@注入

void somethingSetter(@Named('Tag')String s){

}

这里有一个如何使用Guice和Sitebricks设置完整的Java Web服务的教程: http://www.techtraits.ca/five-minute-guide-to-setting-up-a-java-webserver/

答案 1 :(得分:0)

我继续创建了一个ServletModule,它为使用@Inject setter实例化对象的servlet提供服务。实例化对象后,我从Injector获取ServletContext并调用injectMembers方法将实例化对象传递给它。