在Spring项目中,我使用了ServletContextListener的侦听器类型。我使用了@Autowired的实例字段,但是我无法在contextInitialized(event)方法中使用自动装配的实例变量,它会抛出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");
    }

}


或更好的解决方案将是蜘蛛鲍里斯(Boris):

public class MyListener implements ServletContextListener {

    @Autowired
    private MyBean myBean;

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

}

10-08 01:47