renren-security定时任务Task类@Autowired调用Service报错null空指针解决办法

792 阅读1分钟

老萌新今天在开发的时候遇到的问题

image.png

image.png


想要在Qrtz定时任务的task类中调用service的一些方法来定时写数据库,发现@Autowired注入为空,之前也遇到过类似的问题,初步判断是bean注入顺序问题,在spring启动,定时任务的初始化时,service的bean还没有注册好

  • 尝试用SpringContextUtils.getBean()解决

    仍然报错,这次换SpringContextUtils为空指针了,注入顺序依然有问题

    经过长时间搜索尝试,用了@PostConstruct终于解决了

image.png

总结

其实还是没太弄懂为何@Autowired注入为空,按理说@Component应该是比较靠后的执行了,service为什么还没有注册到容器中?注入为空是因为注册顺序的问题吗?

解决办法是将service变为静态变量static,从而把问题转变为static和@Autowired的加载顺序问题。

其次就是@PostConstruct所带来的副作用,虽然对于我这个小项目没什么影响,但是还是想知道有没有更好的解决办法?