如何让DI在网络应用中运行?到目前为止,我已经完成了以下工作:
1)使用@Inject
2)扩展AbstractModule
,以便它将接口类绑定到在步骤1中注释了setter的属性的实现类
3)扩展GuiceContextServletListener
并覆盖getInjector,使其返回Guice.createInjector(new ExtendedAbstractModule())
4)在GuiceContextServletListener
注册扩展web.xml
作为听众
我已经验证了在启动webapp时调用扩展的GuiceContextServletListener.getInjector()
方法。注释了setter的属性没有被注入,并且仍然是null
。
答案 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
方法将实例化对象传递给它。