是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的监听器),然后从该监听器中调用您的监听器。

如果无法实现该解决方案,则可以尝试使用static injection的解决方法。仔细想想,因为您说Guice在您的听众面前被引导了,但事实并非总是如此。

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

public class QuartzContextListener implements ServletContextListener {

    @Inject
    private static Provider<DataAccess> dataAccessProvider;

    ...
}


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

requestStaticInjection(QuartzContextListener.class)

关于java - Guice注入(inject)在ServletContextListener中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36723694/

10-12 05:12