在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);
}
}