[英]Guice injection doesn't work in ServletContextListener
是Guice注入在ServletConextListener中不起作用的原因吗?
这是我的代码:
public class QuartzContextListener implements ServletContextListener {
@Inject
private DataAccess dataAccess;
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println(dataAccess);
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
当然:
任何想法?
它不会起作用,因为Guice没有创建QuartzContextListener
的实例。 如果您使用的是GuiceServletContextListener
我建议仅使用一个侦听器(Guice的侦听器),然后从该侦听器调用您的侦听器。
如果无法解决该问题,则可以尝试使用静态注入的解决方法。 仔细想想,因为您说Guice在您的听众面前被引导了,但事实并非总是如此。
要使用静态注入,您可以像这样更改您的侦听器定义:
public class QuartzContextListener implements ServletContextListener {
@Inject
private static Provider<DataAccess> dataAccessProvider;
...
}
然后,从您的Guice模块之一请求静态注入。
requestStaticInjection(QuartzContextListener.class)
如何扩展GuiceServletContextListener:
class Example extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new MyGuiceModule(), new MyGuiceServletModule());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.