Guice注入在ServletContextListener中不起作用

时间:2016-04-19 16:02:04

标签: java guice guice-servlet

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初始化之后。

有什么想法吗?

2 个答案:

答案 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());
        }
    }