成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

@Autowired報錯的四種解決方案和原因分析!

開發 前端
使用 @Autowired 注解導入 Mapper 對象報錯的原因,是因為 @Autowired 默認情況下,需要注入一個非 NULL 的對象,而被 @Mapper 修飾的類為 MyBatis 的注解,IDEA 并不能很好的識別其為非 NULL 對象,因此就會報錯。

 [[409224]]

作者 | 王磊

來源 | Java中文社群(ID:javacn666)

轉載請聯系授權(微信ID:GG_Stone)

上圖的報錯信息相信大部分程序員都遇到過,奇怪的是雖然代碼報錯,但絲毫不影響程序的正常執行,也就是雖然編譯器 IDEA 報錯,但程序卻能正常的執行,那這其中的原因又是為何?

報錯原因分析

報錯的原因首先是因為 IDEA 強大的報警機制,@Autowired 為 Spring 的注解,含義是將某類動態的注入到當前類中,如下圖所示:

@Autowired 默認是根據 type 進行注入,并且注入時要求(注入)對象不能為 NULL,默認值如下圖所示:

而 IDEA 報錯的原因是:@Autowired 為 Spring 的注解,而注入的 Mapper 對象使用的又是 @Mapper 的注解,然而 @Mapper 又為 MyBaits 的注解,IDEA 能很好的兼容并識別 Spring 的注解,但不能很好的識別 MyBatis 的注解,因此在使用 @Autowired 注解時,IDEA 并不能檢測到 @Mapper 注解的對象不為 NULL,因此就會報錯。

這就是為什么使用 Spring 的注解 @Repository/@Component... 不報錯,而使用 @Mapper 注解卻會報錯的根本原因,如下圖所示:

解決方案1:關閉報警機制

關閉 IDEA 注入報警機制,可以避免報錯,實現步驟如下。

1.打開 IDEA,找到參數設置選項 “Preferences...” ,如下圖所示:

2.依次選擇 “Editor” -> “Inspections” -> “Spring” -> “Spring Core” -> “Code” -> “Autowiring for bean class” 將 “Error” 級別修改成 “Waring” 級別,如下圖所示:

設置完成之后點擊確認,查看之前報錯的 Mapper 類,此時展示效果如下:

報錯信息消失了。

解決方案2:添加Spring注解

在 Mapper 的類上添加 Spring 的注解,也可以解決 IDEA 報錯的問題,如 @Repository 或 @Component 這類注解,如下圖所示:

或使用 @Repository 注解,如下圖所示:

查看之前的報錯信息:

報錯消失了。

解決方案3:允許注入對象為NULL

設置允許注入的 Mapper 對象為 NULL,也可以避免 IDEA 報錯,只需要設置 @Autowired(required=false) 即可,如下圖所示:

(其中 userMapper2 對象就不報錯了)

@Autowired(required=true):表示當使用 @Autowired 注解的時候,該 bean 必須存在,否則注入失敗,默認值。

@Autowired(required=false):表示忽略當前要注入的 bean,如果有直接注入,沒有則跳過,不會報錯。

@Autowired 默認值的實現源碼:

解決方案4:使用@Resource注解

使用 @Resource 注解替換 @Autowired 注解也可以避免報錯,它們的對比效果如下:

@Resource 注解和 @Autowired 注解以當前的場景來說,它們的主要區別是 @Resource 是 Java 自身提供的注解,而 @Autowired 是 Spring 提供的注解,@Autowired 默認值為 required=true,所以必須要一個非 NULL 的對象,當 IDEA 檢測不到對象為 NULL 時就會報錯,而 @Resource 并沒有這項要求。

總結

使用 @Autowired 注解導入 Mapper 對象報錯的原因,是因為 @Autowired 默認情況下,需要注入一個非 NULL 的對象,而被 @Mapper 修飾的類為 MyBatis 的注解,IDEA 并不能很好的識別其為非 NULL 對象,因此就會報錯。當然,它的解決方案也有很多,推薦使用 @Resource 替代 @Autowired 注解的方式來解決此問題。

 

責任編輯:姜華 來源: Java中文社群
相關推薦

2010-01-12 12:15:25

SOA安全解決方案

2009-12-14 15:29:48

解決方案SOA安全

2024-05-22 19:10:18

跨域Web開發

2024-09-26 14:27:14

2009-07-23 19:17:06

微軟Windows7IT

2023-04-12 16:01:51

智能廢物管理垃圾分類機器人

2025-02-18 16:27:01

2009-12-23 12:41:23

寬帶路由器不能上網

2020-06-24 07:49:13

Kubernetes場景網絡

2023-08-26 20:08:15

分庫分表Spring

2020-11-10 10:08:41

Kubernetes容器開發

2015-04-13 15:51:07

混合云抽象云大型主機

2010-03-29 15:21:42

無線上網解決方案

2023-05-30 08:38:25

MySQL數據庫日志

2025-01-07 16:00:00

Kubernetes云原生Pod

2012-02-29 09:44:54

MySQL

2020-04-07 10:05:34

React開發工具

2012-03-09 17:36:21

云立方集裝箱數據中心

2017-02-28 14:28:37

數據跨庫分頁架構

2021-08-25 12:55:33

Linuxcron
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人三级视频 | ww 255hh 在线观看 | 天天色图| www.亚洲视频 | 欧美一级二级三级视频 | 欧美日韩久久久 | 亚洲字幕在线观看 | av无遮挡 | 亚洲综合二区 | 久久久精品 | 黄色在线免费观看视频网站 | 国产精品久久久久久婷婷天堂 | av一区二区三区 | 天天干狠狠干 | 超碰97av| 国产激情福利 | 中文字幕精品一区二区三区精品 | 69精品久久久久久 | 中文字幕欧美一区二区 | 欧美一区2区三区4区公司 | 中文字幕视频在线免费 | 91大片| 国产高清在线 | 日韩国产在线 | 亚洲福利 | 欧洲色| 国产激情视频网址 | 久久日韩精品一区二区三区 | 视频一区二区在线 | 国产精品69毛片高清亚洲 | av大片在线观看 | 国产精品一卡二卡三卡 | 日本精品一区二区 | 日韩国产一区二区三区 | 天天色官网 | 日韩国产精品一区二区三区 | 欧美一区二区 | 在线观看免费av网 | 久久aⅴ乱码一区二区三区 91综合网 | 免费一级大片 | 婷婷色在线播放 |