異常信息:inovationtargetexception nullpointerexception
很奇怪的現(xiàn)象,當(dāng)我使用spring注解注入service時(shí),調(diào)用serviceimpl方法,debug都進(jìn)不去方法,直接拋出inovationtargetexception nullpointerexception異常,自己傳遞的參數(shù)username,password等等明明有值不為空,怎么可能空指針,百思不得姐,,,
registerService.doRegister(username, password),剛開始一直圍繞著doRegister方法,想到底哪里null,其他方法調(diào)用此方法沒有一點(diǎn)問題,所以可以排除doRegister方法內(nèi)部問題,那么,既然方法沒問題,為什么不想一下調(diào)用者的問題呢,于是,測(cè)試:
if(registerService == null){
log.info("registerService為空");
return false;
}
控制臺(tái):registerService為空,果然,是spring注入registerService出現(xiàn)問題,根本沒有注入成功,也就導(dǎo)致空指針問題了,也就導(dǎo)致反射調(diào)用空對(duì)象inovationtargetexception 異常了,所以,排查注入出現(xiàn)的問題
原來(lái),我的WxAuthServiceImpl和QQAuthServiceImpl都實(shí)現(xiàn)了AuthService接口,然后注入的時(shí)候直接寫成了:@Autowired AuthService authService,然后調(diào)用authService.dosomething...方法spring當(dāng)然不知道該調(diào)用哪一個(gè)實(shí)現(xiàn)類的方法,所以報(bào)錯(cuò),所以,解決辦法:
controller類:
@Autowired
@Qualifier("qqAuthService")
AuthService qqAuthService;@Autowired
@Qualifier("wxAuthService")
AuthService wxAuthService;實(shí)現(xiàn)類:
@Service("wxAuthService")
@Service("qqAuthService")
加上唯一注解,以便spring能夠正確注入
搞定
總結(jié):看了很多網(wǎng)上的問題和解決辦法,再結(jié)合自己的,很有可能就是spring注入的問題,沒有注入進(jìn)去,導(dǎo)致異常
題外話:至于網(wǎng)上很多原因及解決辦法,我想說的是,其實(shí)解決辦法很多都可行,只不過只適用于他們那種特定的場(chǎng)景,所以有效,但是落實(shí)到咱每個(gè)人,遇到的錯(cuò)誤不一樣,異常類似,具體的解決辦法肯定不一樣,這時(shí),不應(yīng)該照搬,而應(yīng)該想一下出現(xiàn)這種異常的原因可能是什么,然后再結(jié)合別人的解決方案進(jìn)行調(diào)試,一步一步找到問題和解決辦法,這樣才能提升
另外,debug調(diào)試非常重要,非常重要,非常重要,咱程序員一定要掌握其用法!