本菜鸟在进行springboot项目开发过程中,不止一次经历过NullPointerException报错,最多是@Autowired注解的内容是空的。一开始我还以为是数据库访问操作导致的。简单而不形象的说一下正确的做法就是想使用@Autowired注解的service或者mapper的这个类,他本身也一定是有注解的。如果自己随便创建一个class,这个class没有被标记为mapper、controller啥的,里面想调用一个mapper,到最后就会报NullPointerException。
接下来记录一下我遇到的情况。
我定义了一个线程类,采用单例模式,每当我负责监听的端口收到消息后就放到一个队列里,然后这个线程就不停从队列里取消息进行处理。在处理的过程中需要调用我的mapper来将处理好的消息存入数据库。由于我的线程类不太适合定义成controller或service什么的,再加上一开始不知道想调用@Autowired注解的mapper必须这个class本身也有注解,就一直报错空指针。
最后的解决方法是在监听端口(一个加了@RestController注解的controller)中进行
@Autowired
private PointProcessService ppService;
然后调用线程时将监听端口创建的ppService(我的mapper被创建在这个service里面,这个service当然是有@Service注解的)传到线程里面,这样在线程里就可以直接使用service里面的mapper方法了。