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

@Autowired為什么會報錯?如何解決?

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

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

報錯原因分析

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

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

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

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

解決方案1:關(guān)閉報警機制

關(guān)閉 IDEA 注入報警機制,可以避免報錯,實現(xiàn)步驟如下。

打開 IDEA,找到參數(shù)設(shè)置選項 “Preferences...” ,如下圖所示:

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

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

報錯信息消失了。

解決方案2:添加Spring注解

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

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

查看之前的報錯信息:

報錯消失了。

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

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

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

  • @Autowired(required=true):表示當使用 @Autowired 注解的時候,該 bean 必須存在,否則注入失敗,默認值。
  • @Autowired(required=false):表示忽略當前要注入的 bean,如果有直接注入,沒有則跳過,不會報錯。

@Autowired 默認值的實現(xiàn)源碼:

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

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

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

小結(jié)

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

責任編輯:姜華 來源: Java中文社群
相關(guān)推薦

2025-04-01 05:22:00

JavaThread變量

2023-04-04 09:04:18

命令驅(qū)動器

2015-05-15 17:29:13

.Netxp系統(tǒng)如何解決

2023-04-19 14:20:49

2024-11-29 08:20:22

Autowired場景項目

2020-09-24 09:29:34

人工智能

2023-12-26 17:07:56

GenAICIO

2025-02-24 10:36:15

2025-04-25 08:25:00

DNS污染網(wǎng)絡(luò)攻擊IP地址

2022-10-25 08:46:26

JSONJavaScript

2024-01-04 12:53:00

Unicode字符UTF-8

2012-09-05 11:09:15

SELinux操作系統(tǒng)

2022-09-26 10:26:27

FieldIDEASpring

2022-09-07 07:05:25

跨域問題安全架構(gòu)

2018-11-21 08:28:30

Docker業(yè)務(wù)容器

2021-03-04 17:21:49

內(nèi)存檢測泄漏

2023-10-11 12:35:29

Maven

2021-07-05 08:09:54

@AutowiredSpringMapper

2023-03-30 10:30:48

2023-02-15 07:03:41

跨域問題面試安全
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美激情99 | 欧美999| 日韩免费看视频 | 国产欧美日韩一区 | 欧美日韩不卡合集视频 | 视频在线一区二区 | 91精品久久久久久久久中文字幕 | 日韩一级不卡 | 亚洲成人www | 久久99深爱久久99精品 | 天堂男人av | 国产成人精品综合 | 黄网站免费在线看 | 一级大片免费 | 欧美三级三级三级爽爽爽 | 中文字幕久久精品 | 国产色| 亚洲精品视频在线观看免费 | 欧美精品二区三区 | 国产精品久久九九 | 国产精品视频区 | 久久久久久久久久久爱 | 亚洲精品麻豆 | 不卡的av在线| 羞羞色网站 | 激情视频一区 | 欧美精品一| 国产男女视频网站 | 国产一区二区在线视频 | 一区二区在线免费观看 | 亚洲精品片| 7799精品视频天天看 | 一区二区三区精品视频 | 亚洲视频免费在线观看 | 久久国产日韩欧美 | 欧美视频日韩 | 欧美日韩国产在线观看 | 99久久99久久精品国产片果冰 | 国产欧美日韩视频 | 天天射夜夜操 | 欧美精品一区在线发布 |