如何让 DI 与 Guice 和 Webapps 一起工作?
如何让 DI 在 Web 应用程序中工作?到目前为止,我已经完成了以下操作:
1)使用@Inject
注释setter方法
2)扩展AbstractModule
,以便它将接口类绑定到属性的实现类setter 在步骤 1 中被注释
3) 扩展 GuiceContextServletListener
并覆盖 getInjector 以便它返回 Guice.createInjector(new ExtendedAbstractModule())
4) 在 web.xml
中注册扩展的 GuiceContextServletListener
作为监听器
我已经验证了扩展的 GuiceContextServletListener.getInjector()
方法在 webapp 启动时被调用。 setter 被注释的属性不会被注入并保持 null
。
How do you get DI to work in a webapp? So far I've done the following:
1) Annotate setter method with @Inject
2) Extend AbstractModule
so that it binds the interface class to the implementation class for the attribute whose setter was annotated in step 1
3) Extend GuiceContextServletListener
and overrode getInjector so that it returns Guice.createInjector(new ExtendedAbstractModule())
4) Registered the extended GuiceContextServletListener
in web.xml
as a listener
I've verified that the extended GuiceContextServletListener.getInjector()
method is called when the webapp is started. The attribute whose setter was annotated is not being injected and remains null
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我继续创建了一个
ServletModule
,它为使用@Inject
setter 实例化对象的 servlet 提供服务。实例化对象后,我从ServletContext
获取Injector
并调用injectMembers
方法,将实例化的对象传递给它。I went ahead and created a
ServletModule
that serves the servlet that instantiates the object with the@Inject
setter. After instantiating the object I get theInjector
from theServletContext
and call theinjectMembers
method passing it the instantiated object.您在设置器上使用什么注释?
我通常使用 @Named 注释来获取可以指向属性文件或单独设置的属性值。
http://code.google.com/p/google-guice/wiki/BindingAnnotations
@Inject
void SomethingSetter(@Named('Tag')String s) {
}
这里有一个关于如何使用 Guice 和 Sitebricks 设置完整的 Java Web 服务的教程:
http://www.techtraits.ca/设置 Java Web 服务器的五分钟指南/
What annotation are are you using on the setter?
I normally use @Named annotation to get attribute values which can be pointed to a property file or setup individually.
http://code.google.com/p/google-guice/wiki/BindingAnnotations
@Inject
void somethingSetter(@Named('Tag')String s) {
}
There is a tutorial of how to setup a complete Java web service using Guice and Sitebricks here:
http://www.techtraits.ca/five-minute-guide-to-setting-up-a-java-webserver/