欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?@Autowired報(bào)錯(cuò)原因分析和4種解決方案

 更新時(shí)間:2022年05月10日 14:29:19   作者:??Java中文社群????  
這篇文章主要介紹了Java?@Autowired報(bào)錯(cuò)原因分析和4種解決方案,文章圍繞主題展開(kāi)詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考以一下

前言:

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

報(bào)錯(cuò)原因分析

報(bào)錯(cuò)的原因首先是因?yàn)?IDEA 強(qiáng)大的報(bào)警機(jī)制,@Autowired 為 Spring 的注解,含義是將某類(lèi)動(dòng)態(tài)的注入到當(dāng)前類(lèi)中,

如下圖所示: 

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

 而 IDEA 報(bào)錯(cuò)的原因是:@Autowired 為 Spring 的注解,而注入的 Mapper 對(duì)象使用的又是 @Mapper 的注解,然而 @Mapper 又為 MyBaits 的注解,IDEA 能很好的兼容并識(shí)別 Spring 的注解,但不能很好的識(shí)別 MyBatis 的注解,因此在使用 @Autowired 注解時(shí),IDEA 并不能檢測(cè)到 @Mapper 注解的對(duì)象不為 NULL,因此就會(huì)報(bào)錯(cuò)。 

這就是為什么使用 Spring 的注解 @Repository/@Component... 不報(bào)錯(cuò),而使用 @Mapper 注解卻會(huì)報(bào)錯(cuò)的根本原因,

如下圖所示: 

解決方案1:關(guān)閉報(bào)警機(jī)制

關(guān)閉 IDEA 注入報(bào)警機(jī)制,可以避免報(bào)錯(cuò),實(shí)現(xiàn)步驟如下。

1.打開(kāi) IDEA,找到參數(shù)設(shè)置選項(xiàng) “Preferences...” ,如下圖所示: 

 2.依次選擇

“Editor” -> “Inspections” -> “Spring” -> “Spring Core” -> “Code” -> “Autowiring for bean class” 將 “Error” 級(jí)別修改成 “Waring” 級(jí)別,

如下圖所示: 

 設(shè)置完成之后點(diǎn)擊確認(rèn),查看之前報(bào)錯(cuò)的 Mapper 類(lèi),此時(shí)展示效果如下:

 報(bào)錯(cuò)信息消失了。?

解決方案2:添加Spring注解

在 Mapper 的類(lèi)上添加 Spring 的注解,也可以解決 IDEA 報(bào)錯(cuò)的問(wèn)題,如 @Repository 或 @Component 這類(lèi)注解,

如下圖所示: 

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

 查看之前的報(bào)錯(cuò)信息: 

 報(bào)錯(cuò)消失了。

解決方案3:允許注入對(duì)象為NULL

設(shè)置允許注入的 Mapper 對(duì)象為 NULL,也可以避免 IDEA 報(bào)錯(cuò),只需要設(shè)置 @Autowired(required=false) 即可,

如下圖所示: 

 (其中 userMapper2 對(duì)象就不報(bào)錯(cuò)了)

  • @Autowired(required=true):表示當(dāng)使用 @Autowired 注解的時(shí)候,該 bean 必須存在,否則注入失敗,默認(rèn)值。
  • @Autowired(required=false):表示忽略當(dāng)前要注入的 bean,如果有直接注入,沒(méi)有則跳過(guò),不會(huì)報(bào)錯(cuò)。

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

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

使用 @Resource 注解替換 @Autowired 注解也可以避免報(bào)錯(cuò),它們的對(duì)比效果如下: 

 @Resource 注解和 @Autowired 注解以當(dāng)前的場(chǎng)景來(lái)說(shuō),它們的主要區(qū)別是 @Resource 是 Java 自身提供的注解,而 @Autowired 是 Spring 提供的注解,@Autowired 默認(rèn)值為 required=true,所以必須要一個(gè)非 NULL 的對(duì)象,當(dāng) IDEA 檢測(cè)不到對(duì)象為 NULL 時(shí)就會(huì)報(bào)錯(cuò),而 @Resource 并沒(méi)有這項(xiàng)要求。

總結(jié)

使用 @Autowired 注解導(dǎo)入 Mapper 對(duì)象報(bào)錯(cuò)的原因,是因?yàn)?@Autowired 默認(rèn)情況下,需要注入一個(gè)非 NULL 的對(duì)象,而被 @Mapper 修飾的類(lèi)為 MyBatis 的注解,IDEA 并不能很好的識(shí)別其為非 NULL 對(duì)象,因此就會(huì)報(bào)錯(cuò)。當(dāng)然,它的解決方案也有很多,推薦使用 @Resource 替代 @Autowired 注解的方式來(lái)解決此問(wèn)題。?

到此這篇關(guān)于Java @Autowired報(bào)錯(cuò)原因分析和4種解決方案的文章就介紹到這了,更多相關(guān)Autowired報(bào)錯(cuò)分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中ThreadLocal線程變量的實(shí)現(xiàn)原理

    Java中ThreadLocal線程變量的實(shí)現(xiàn)原理

    本文主要介紹了Java中ThreadLocal線程變量的實(shí)現(xiàn)原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • SSM框架整合之junit測(cè)試的方法

    SSM框架整合之junit測(cè)試的方法

    本篇文章主要介紹了SSM框架整合之junit測(cè)試的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Java中==與equals的區(qū)別小結(jié)

    Java中==與equals的區(qū)別小結(jié)

    這篇文章主要介紹了Java中==與equals的區(qū)別小結(jié),本文總結(jié)結(jié)論:== 與 equals()比較的內(nèi)容是不同的,equals()方式是String類(lèi)中的方法,它用于比較兩個(gè)對(duì)象引用所指的內(nèi)容是否相等,而 == 比較的是兩個(gè)對(duì)象引用的地址是否相等,需要的朋友可以參考下
    2015-06-06
  • Java利用反射獲取object的屬性和值代碼示例

    Java利用反射獲取object的屬性和值代碼示例

    這篇文章主要介紹了Java利用反射獲取object的屬性和值代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java實(shí)現(xiàn)折半插入排序算法的示例代碼

    Java實(shí)現(xiàn)折半插入排序算法的示例代碼

    折半插入排序(Binary Insertion Sort)是對(duì)插入排序算法的一種改進(jìn)。不斷的依次將元素插入前面已排好序的序列中。本文將利用Java語(yǔ)言實(shí)現(xiàn)這一排序算法,需要的可以參考一下
    2022-08-08
  • 解決Springboot2.1.x配置Activiti7單獨(dú)數(shù)據(jù)源問(wèn)題

    解決Springboot2.1.x配置Activiti7單獨(dú)數(shù)據(jù)源問(wèn)題

    這篇文章主要介紹了Springboot2.1.x配置Activiti7單獨(dú)數(shù)據(jù)源問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 老生常談java中cookie的使用

    老生常談java中cookie的使用

    下面小編就為大家?guī)?lái)一篇老生常談java中cookie的使用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • Java接口返回json如何忽略特定屬性

    Java接口返回json如何忽略特定屬性

    這篇文章主要介紹了Java接口返回json如何忽略特定屬性,通過(guò)SimplePropertyPreFilter方式(Json返回),這種寫(xiě)法,接口返回類(lèi)型就要求是Json字符串類(lèi)型,本文通過(guò)場(chǎng)景實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • mybatis于xml方式和注解方式實(shí)現(xiàn)多表查詢的操作方法

    mybatis于xml方式和注解方式實(shí)現(xiàn)多表查詢的操作方法

    在數(shù)據(jù)庫(kù)中,單表的操作是最簡(jiǎn)單的,但是在實(shí)際業(yè)務(wù)中最少也有十幾張表,并且表與表之間常常相互間聯(lián)系,本文給大家介紹mybatis于xml方式和注解方式實(shí)現(xiàn)多表查詢的操作方法,感興趣的朋友一起看看吧
    2023-12-12
  • Java異常ClassCastException的解決

    Java異常ClassCastException的解決

    這篇文章主要介紹了Java異常ClassCastException的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論