java - 如何在ServletContextListener中使用@Autowired实例变量

标签 java spring

在Spring项目中,我使用了ServletContextListener的监听器类型。我使用了 @Autowired 实例字段,但我无法在 contextInitialized(event) 方法中使用 Autowiring 实例变量,它会抛出 NullpointerException .

如何使用@Autowired来实现此目的

最佳答案

你不能。 @Autowired 仅在上下文初始化后才起作用。

所以你可以做这个黑客:

public class MyListener implements ServletContextListener {

    private MyBean myBean;    

    @Override
    public void contextInitialized(ServletContextEvent event) {
        WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
        this.myBean = (MyBean)ctx.getBean("myBean");
    }

}

或者更好的解决方案将感谢蜘蛛鲍里斯:

public class MyListener implements ServletContextListener {

    @Autowired
    private MyBean myBean;    

    @Override
    public void contextInitialized(ServletContextEvent event) {
        WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
        ctx.autowireBean(this);
    }

}

关于java - 如何在ServletContextListener中使用@Autowired实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39787519/

相关文章:

Java 模式匹配无法找到具有正则表达式 [A-Z0-9._%+-]+@[A-Z0-9.-]{3,65}\.[A-Z]{2,4} 的电子邮件

java - spring Autowiring (属性名和bean名必须相同)

css - Spring MVC,无法加载背景图片

java - 我的 from 子句中存在语法错误

java - 自动登录 Gmail

java - 解决 Java 中的 NoClassDefFoundError

java - Springboot请求方法 'POST'不支持

java - 提交晚上执行的任务

java - 为什么在 @SpringBootApplication 类中声明的 bean 已注册,即使它不是构造型类?

java - 使用java处理sqlite事务