1

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

任何的想法?

4

2 回答 2

1

它不起作用,因为 Guice 没有创建您的QuartzContextListener. 如果你正在使用GuiceServletContextListener我建议只使用一个监听器(Guice 的那个)并从那个监听器中调用你的监听器。

如果该解决方案不可行,您可以尝试使用静态注入的解决方法。小心,想,因为你说 Guice 在你的听众之前被引导,但情况可能并非总是如此。

要使用静态注入,您可以像这样更改侦听器定义:

public class QuartzContextListener implements ServletContextListener {

    @Inject
    private static Provider<DataAccess> dataAccessProvider;

    ...
}

然后,从您的一个 Guice 模块请求静态注入。

requestStaticInjection(QuartzContextListener.class)
于 2016-04-20T06:20:35.537 回答
0

扩展 GuiceServletContextListener 怎么样:

class Example extends GuiceServletContextListener {
        @Override
        protected Injector getInjector() {
            return Guice.createInjector(new MyGuiceModule(), new MyGuiceServletModule());
        }
    }
于 2016-04-19T16:35:52.523 回答