SpringContextUtil工具类代码:
调用SpringContextUtil代码,在构造方法中使用,类没有放到容器中管理
调用CollectTask的类,在容器中,项目启动时new CollectTask
整个流程就是在项目启动时afterPropertiesSet()方法中new CollectTask(),从而调用到了工具类SpringContextUtil.getBean()方法。其中,在这三个类中,只有CollectTask类没有放到容器中管理。
问题:
在实际运行中 ,项目在CollectTask类中的构造方法里的SpringContextUtil.getBean()方法报空指针错误,而且该报错并不是每次都有(有些时候项目正常启动并不会报空指针)。
原因:
在调用SpringContextUtil.getBean()方法时SpringContextUtil还没有被放到容器中,所以报空指针异常。而解决思路也很简单,就是确保SpringContextUtil初始化的时间早于afterPropertiesSet()方法所在的类。
解决:
在类上加上注解@DependsOn(“springContextUtil”),表示该类的初始化依赖于SpringContextUtil,也就是在初始化该类之前需要先初始化SpringContextUtil,从而避免因为SpringContextUtil没有初始化而造成的空指针问题。