IDEA中@Autowired自動(dòng)注入MyBatis?Mapper報(bào)紅警告的幾種解決方法
今天在使用 IDEA 使用 MyBatis 的時(shí)候遇到了這種情況:

可以看到 userMapper 下有個(gè)紅色的波浪警告,雖然代碼沒(méi)有任何問(wèn)題,能正常運(yùn)行,但是這個(gè)紅色警告在這里杵著確實(shí)讓人很窩心。
于是我在網(wǎng)上找了找,最終明白了原因所在:
- 因?yàn)?IDEA 可以智能的理解上下文,然而
UserMapper這個(gè)接口是 MyBatis 的 IDEA 理解不了。 - 而
@Autowired注解,默認(rèn)情況下要求依賴(lài)對(duì)象(也就是userMapper)必須存在。而 IDEA 認(rèn)為這個(gè)對(duì)象的實(shí)例/代理是個(gè) null ,所以就友好地給個(gè)提示。
然后最終的解決方案總結(jié)了幾個(gè),按需使用把:
方法1:為 @Autowired 注解設(shè)置 required = false
使用 @Autowired 注解時(shí),若希望允許 null 值,可設(shè)置 required = false,像這樣:
@Autowired(required = false) private UserMapper userMapper;
這樣就不會(huì)有警告了。原因很好理解:IDEA 認(rèn)為 userMapper 是個(gè) null ,給了警告;加上 required = false 后,使用 @Autowired 注解不再去校驗(yàn) userMapper 是否存在了。也就不會(huì)有警告了。
總結(jié):
這種方式有點(diǎn)蛋疼。一個(gè)龐大的既有項(xiàng)目,可能到處都在引用 Mapper,總不能到處都補(bǔ)上 required = false 吧……而且對(duì)于新手/新員工,很難一眼看懂加 required = false 屬性只是為了解決 IDEA 的警告。
方法2:使用 @Resource 替換 @Autowired
像這樣:
@Resource private UserMapper userMapper;
這樣也不會(huì)再有討厭的警告。如果你對(duì)原因感興趣,不妨了解一下《@Autowired 與@Resource的區(qū)別》。
總結(jié):
這種方式挺贊,但如果一個(gè)項(xiàng)目已經(jīng)大量使用 @Autowired ,然后為了個(gè)警告到處改成 @Resource ,也有點(diǎn)蛋疼。
方法3:在 Mapper 接口上添加 @Repository 注解
@Repository
public interface UserMapper extends Mapper<User> {
}
這樣能讓你的
@Autowired
private UserMapper userMapper;
不再報(bào)紅。
當(dāng)然,如果你用 @Component 替換 @Repository 也是可以的。原理大致:IDEA 不是認(rèn)為 userMapper 是個(gè) null 嘛…加個(gè) @Repository 注解騙一下 IDEA 就OK了……
總結(jié):
這種方式比較贊,改動(dòng)小,也簡(jiǎn)單,我比較喜歡。
方法4:用 Lombok
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TestService {
private final UserMapper userMapper;
...
}
方法5:把 IDEA 的警告關(guān)掉。
個(gè)人沒(méi)試過(guò),也沒(méi)有動(dòng)力去試。沒(méi)有提示的 IDEA 是沒(méi)有靈魂的,我從來(lái)不去修改 IDEA 的任何警告設(shè)置。
方法6:安裝 mybatis plugin 即可解決該問(wèn)題。
到此這篇關(guān)于IDEA中@Autowired自動(dòng)注入MyBatis Mapper報(bào)紅警告的幾種解決方法的文章就介紹到這了,更多相關(guān)IDEA @Autowired自動(dòng)注入報(bào)紅警告 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Cloud Gateway詳細(xì)使用最佳實(shí)踐
Spring Cloud Gateway 是 Spring Cloud 生態(tài)系統(tǒng)中的現(xiàn)代化 API 網(wǎng)關(guān)組件,用于構(gòu)建微服務(wù)架構(gòu)中的統(tǒng)一入口網(wǎng)關(guān),本文介紹Spring Cloud Gateway詳細(xì)使用最佳實(shí)踐,感興趣的朋友一起看看吧2025-11-11
Springcloud-nacos實(shí)現(xiàn)配置和注冊(cè)中心的方法
這篇文章主要介紹了Springcloud-nacos實(shí)現(xiàn)配置和注冊(cè)中心的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
10分鐘在服務(wù)器部署好Jenkins的詳細(xì)過(guò)程
這篇文章主要介紹了10分鐘在服務(wù)器部署好Jenkins,本文主要是?Jenkins?的安裝部署,那前提我們應(yīng)該裝好?Git?Maven?JDK,準(zhǔn)備工作本文不給大家詳細(xì)介紹了,對(duì)服務(wù)器部署Jenkins相關(guān)知識(shí)感興趣的朋友一起看看吧2022-08-08
JDK源碼之線(xiàn)程并發(fā)協(xié)調(diào)神器CountDownLatch和CyclicBarrier詳解
我一直認(rèn)為程序是對(duì)于現(xiàn)實(shí)世界的邏輯描述,而在現(xiàn)實(shí)世界中很多事情都需要各方協(xié)調(diào)合作才能完成,就好比完成一個(gè)平臺(tái)的交付不可能只靠一個(gè)人,而需要研發(fā)、測(cè)試、產(chǎn)品以及項(xiàng)目經(jīng)理等不同角色人員進(jìn)行通力合作才能完成最終的交付2022-02-02
java web開(kāi)發(fā)之購(gòu)物車(chē)功能實(shí)現(xiàn)示例代碼
這篇文章主要介紹了java web開(kāi)發(fā)之購(gòu)物車(chē)功能實(shí)現(xiàn)示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
面向切面的Spring通過(guò)切點(diǎn)來(lái)選擇連接點(diǎn)實(shí)例詳解
這篇文章主要為大家介紹了面向切面的Spring通過(guò)切點(diǎn)來(lái)選擇連接點(diǎn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Java基礎(chǔ)知識(shí)精通塊作用域與條件及switch語(yǔ)句
塊(block,即復(fù)合語(yǔ)句)是指由若干條 Java 語(yǔ)句組成的語(yǔ)句,并由一對(duì)大括號(hào)括起來(lái)。塊確定了變量的作用域。一個(gè)塊可以嵌套在另一個(gè)塊中;條件語(yǔ)句、switch語(yǔ)句是我們常見(jiàn)會(huì)用到的結(jié)構(gòu),感興趣的朋友來(lái)看看吧2022-04-04
解決Mybatis-Plus更新方法不更新NULL字段的問(wèn)題
這篇文章主要介紹了解決Mybatis-Plus更新方法不更新NULL字段的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

