繁体   English   中英

Guice注入在ServletContextListener中不起作用

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

任何想法?

它不会起作用,因为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM