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) {
}
当然:
有什么想法吗?
答案 0 :(得分:1)
它不会起作用,因为Guice没有创建QuartzContextListener
的实例。如果你正在使用GuiceServletContextListener
我建议只使用一个听众(Guice')并从那个人那里打电话给你。
如果无法使用该解决方案,您可以尝试使用static injection的解决方法。小心,想一想,因为你说Guice在你的听众面前被引导但是情况可能并非总是如此。
要使用静态注入,您可以更改您的侦听器定义:
public class QuartzContextListener implements ServletContextListener {
@Inject
private static Provider<DataAccess> dataAccessProvider;
...
}
然后,从你的一个Guice模块中,请求静态注入。
requestStaticInjection(QuartzContextListener.class)
答案 1 :(得分:0)
如何扩展GuiceServletContextListener:
class Example extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new MyGuiceModule(), new MyGuiceServletModule());
}
}