今天碰到一个 奇怪问题
@Autowied、@Resource("tdsmBranchService") 都报NullPointerException
平时正常注入Bean时候,代码如下
@Slf4j
@Component
public class BXListener extends AnalysisEventListener<BXPojo> {
@Autowired
private TdsmBranchService tdsmBranchService;
@Override
public void invoke(BXPojo data, AnalysisContext context) {
if (bxPojoList.size() == BATCH_COUNT && errList.size() == 0) {
// 集合存放数据达到500条并且读取无异常,即批量落库
tdsmBranchService.tdsmBranchBatchAddBX(bxPojoList);//此处报了NullPointerException
}
}
}
异常情况时候,使用注入的 bean 出现了注入为null 的情况,具体原因不详,猜测应该与 @Component 注解有关或者是这个实现了某个接口然后在重写的方法中使用的 有关,因为在其他 @Service 、@Controller 注解的类中使用是没有问题的!
解决方式
@Slf4j
@Component
public class BXListener extends AnalysisEventListener<BXPojo> {
@Autowired
private TdsmBranchService tdsmBranchService;
public static TdsmBranchService branchService;
@PostConstruct
public void tdsmBranchService() {
branchService = this.tdsmBranchService;
}
@Override
public void invoke(BXPojo data, AnalysisContext context) {
if (bxPojoList.size() == BATCH_COUNT && errList.size() == 0) {
branchService.xxxMapper(bxPojoList);// 此处可以正常使用了
}
}
}
这应该只是其中一种解决方式,或许对于类似问题并不通用,但是他解决了我的问题!