这里写目录标题
记一次spring 在tomcat监听器赋值失败的问题
public class servletContextLister implements ServletContextListener {
@Autowired
DicService dicService;
当我使用这个dicService对象时候,报空指针异常:
13-Nov-2020 13:10:39.106 信息 [RMI TCP Connection(3)-127.0.0.1] org.springframework.web.context.ContextLoader.initWebApplicationContext Root WebApplicationContext initialized in 1318 ms
java.lang.NullPointerException
也就是说这个dicService没赋上值。
查阅资料知道问题所在:
当调用dicService方法时,spring容器还没有完成对注解的扫描,dicService对象也就没有赋值,spring自动注解的优先级没有Listener监听器优先级高,所以contextListener初始化的时候根据@Autowired扫描,肯定是null的。
解决方法:手动获取spring监听器自动创建的ioc容器对象,手动获取容器中的对象。
public class servletContextLister implements ServletContextListener {
//获取spring容器对象
ApplicationContext a = ContextLoader.getCurrentWebApplicationContext();
//获取创建的service对象
DicService dicService = (DicService) a.getBean("dicServiceImpl");
}