异常信息:inovationtargetexception nullpointerexception
很奇怪的现象,当我使用spring注解注入service时,调用serviceimpl方法,debug都进不去方法,直接抛出inovationtargetexception nullpointerexception异常,自己传递的参数username,password等等明明有值不为空,怎么可能空指针,百思不得姐,,,
registerService.doRegister(username, password),刚开始一直围绕着doRegister方法,想到底哪里null,其他方法调用此方法没有一点问题,所以可以排除doRegister方法内部问题,那么,既然方法没问题,为什么不想一下调用者的问题呢,于是,测试:
if(registerService == null){
log.info("registerService为空");
return false;
}
控制台:registerService为空,果然,是spring注入registerService出现问题,根本没有注入成功,也就导致空指针问题了,也就导致反射调用空对象inovationtargetexception 异常了,所以,排查注入出现的问题
原来,我的WxAuthServiceImpl和QQAuthServiceImpl都实现了AuthService接口,然后注入的时候直接写成了:@Autowired AuthService authService,然后调用authService.dosomething...方法spring当然不知道该调用哪一个实现类的方法,所以报错,所以,解决办法:
-
controller类:
@Autowired
@Qualifier("qqAuthService")
AuthService qqAuthService; -
@Autowired
@Qualifier("wxAuthService")
AuthService wxAuthService; -
实现类:
@Service("wxAuthService")
@Service("qqAuthService")
加上唯一注解,以便spring能够正确注入
搞定
总结:看了很多网上的问题和解决办法,再结合自己的,很有可能就是spring注入的问题,没有注入进去,导致异常
题外话:至于网上很多原因及解决办法,我想说的是,其实解决办法很多都可行,只不过只适用于他们那种特定的场景,所以有效,但是落实到咱每个人,遇到的错误不一样,异常类似,具体的解决办法肯定不一样,这时,不应该照搬,而应该想一下出现这种异常的原因可能是什么,然后再结合别人的解决方案进行调试,一步一步找到问题和解决办法,这样才能提升
另外,debug调试非常重要,非常重要,非常重要,咱程序员一定要掌握其用法!
网友评论