今天发布的时候遇到了一个NPE,最开始还有点摸不着头脑。
代码是这样的,实现了一个Callable接口,在里面注入了一个bean:
public class MyCallable implements Callable {
@Resource
private MyService myService;
@Override
public Object call() {
myService.doSomething()
}
}
使用:
threadPool.submit(new MyCallable());
咋一看没啥问题,运行的时候就报了个空指针,原因是MyService没有成功注入。
为什么呢?
前面这个例子中,MyCallable
这个类压根就不是一个bean,不会被Spring boot扫描到,何谈输入属性呢?
解决方式是写一个构造方法,对MyService进行手动初始化:
public class MyCallable implements Callable {
private MyService myService;
public void MyCallble(MyService myService) {
this.myService = myService;
}
@Override
public Object call() {
myService.doSomething()
}
}