idea注入mapper報錯報紅的解決方案


轉載(109條消息) idea 注入mapper報錯報紅的幾種解決方案_嗑嗑磕嗑瓜子的貓的博客-CSDN博客_idea mapper報紅

相信大家在使用idea的時候一定會遇到這樣的問題,就是在service里注入mapper的時候,明明代碼沒有問題,也可以運行,但是idea它就是給你報個錯,有個紅色的波浪線在下面,這讓人感覺很不舒服。怎么辦呢?

先來大概說一下,產生這種現象的原因。idea其實是非常智能的,它可以理解Spring的上下文,然鵝 XxxxMapper 這種接口是Mybatis的,IDEA它理解不了。再加上 @Autowired 這個注解呢,它默認情況下要求依賴對象(也就是 XxxxMapper )必須存在,而IDEA認為這個對象的實例/代理是個null,所以就友好地給個提示,給你報個紅~

今天就說一下以下幾種解決方案

方法1:為 @Autowired 注解設置required = false
使用 @Autowired 注解時,若希望允許null值,可設置required = false

像這樣:

這樣就不會有警告了。原因很好理解:IDEA認為cashTicketMapper是個null,給了警告;加上required = false后,使用 @Autowired 注解不再去校驗userMapper是否存在了,也就不會有警告了。

但是,這種方式有點蛋疼!一個龐大的既有項目,可能到處都在引用Mapper,總不能到處都補上 required = false 吧。而且對於新手/新員工,很難一眼看懂加required = false屬性只是為了解決IDEA的警告。

方法2:用 @Resource 替換 @Autowired
像這樣:

這樣也不會再有討厭的警告。如果你對原因感興趣,不妨去了解一下@Autowired 與@Resource的區別

這種方式挺贊,但如果一個項目已經大量使用@Autowired,然后為了個警告到處改成@Resource,也有點蛋疼。

方法3:在Mapper接口上加上@Repository注解
像這樣:

這樣也能讓你的

@Autowired
private CashTicketMapper cashTicketMapper;
不再報錯。

當然,如果你用@Component替換@Repository也是可以的。原理大致:IDEA不是認為 userMapper 是個null…

加個@Repository注解或者@Component騙一下IDEA就OK了……

這種方式也比較贊,改動小,也簡單,我比較喜歡。

方法4:用Lombok
像這樣:

Lombok生成的代碼是這樣的:

@Service
public class TestService {undefined
private CashTicketMapper cashTicketMapper;
@Autowired
public TestService(CashTicketMapper cashTicketMapper;) {undefined
this.cashTicketMapper= cashTicketMapper;
}
}
但如果自己手寫成Lombok生成的代碼,IDEA依然會給你報警告 。我猜,應該是IDEA的Lombok插件把IDEA搞懵逼了…所以不提示了…

方法5:把IDEA的警告關閉掉
這個方法比較不推薦,感覺沒有提示的IDEA是沒有靈魂的,所以不推薦。我也從來不去修改IDEA的任何警告設置。

但是大家可以按照下圖去試試

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM