本文主要针对于在Spring容器中无法使用注入好的对象这个bug进行分析。
bug情况复现:
1)SpringBoot各项配置正常,所有注解均正常使用,SpringApplication中已经正常使用
@ComponentScan @SpringBootApplication
注解。
2)之后,将Service使用@Service注解,注入到到Spring中。
3)在其他类中,使用@Autowared/@Resource注解,完成对于对像的引用。
4)调用方法。
5)启动项目,发现提示空指针异常
解决办法:
1)检查各项配置是否正常,是否配置了扫描
2)检查对于Bean的使用,是否打了注解
3)对于调用关系,注意是否将依赖的类全部注入到Spring容器中。(很关键)
解释:
由于作者在使用调度线程时,进行了如下的编码:
executor.scheduleAtFixedRate(new taskThreads(),0,50, TimeUnit.MILLISECONDS);
可以看到,由于scheduleAtFixedRate方法需要传入一个任务类,该调度线程会调用该任务,定时执行该线程。
但是,这个类没有交给Spring托管!!!
因此,在该任务类中,使用其他服务时,没有办法使用已经注入的类,这时候就会提示空指针异常!
修改方法,只需要将该类注入到Spring中即可。