<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          CTO 說了,不懂 @Autowired 和 @Resource 區(qū)別的人可以領(lǐng)盒飯了

          共 2636字,需瀏覽 6分鐘

           ·

          2022-04-11 17:59

          點(diǎn)擊藍(lán)色“程序員黃小斜”關(guān)注我喲

          加個(gè)“星標(biāo)”,每天和你一起多進(jìn)步一點(diǎn)點(diǎn)

          來源:網(wǎng)絡(luò)


          @Resource和@Autowired都是做bean的注入時(shí)使用,其實(shí)@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要導(dǎo)入,但是Spring支持該注解的注入。

          先上圖:

          1、共同點(diǎn)

          兩者都可以寫在字段和setter方法上。兩者如果都寫在字段上,那么就不需要再寫setter方法。

          基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能。

          項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro

          2、不同點(diǎn)

          (1)@Autowired

          @Autowired為Spring提供的注解,需要導(dǎo)入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。

          public?class?TestServiceImpl?{
          ???//?下面兩種@Autowired只要使用一種即可
          ???@Autowired
          ???private?UserDao?userDao;?//?用于字段上
          ???
          ???@Autowired
          ???public?void?setUserDao(UserDao?userDao)?{
          ???//?用于屬性的方法上
          ???????this.userDao?=?userDao;
          ???}
          }

          @Autowired注解是按照類型(byType)裝配依賴對(duì)象,默認(rèn)情況下它要求依賴對(duì)象必須存在,如果允許null值,可以設(shè)置它的required屬性為false。如果我們想使用按照名稱(byName)來裝配,可以結(jié)合@Qualifier注解一起使用。如下:

          public?class?TestServiceImpl?{
          ???@Autowired
          ???@Qualifier("userDao")
          ???private?UserDao?userDao;
          }

          注意:

          經(jīng)常可以在IDEA中看到關(guān)于@Autowired注解的黃牌警告,如下:

          @Autowire
          private?JdbcTemplate?jdbcTemplate;

          提示的警告信息

          Field?injection?is?not?recommended?Inspection?info:?Spring?Team?recommends:?"Always?use?constructor?based?dependency?injection?in?your?beans.?Always?use?assertions?for?mandatory?dependencies".

          這段是Spring工作組的建議,大致翻譯一下:

          屬性字段注入的方式不推薦,檢查到的問題是:Spring團(tuán)隊(duì)建議:"始終在bean中使用基于構(gòu)造函數(shù)的依賴項(xiàng)注入,始終對(duì)強(qiáng)制性依賴項(xiàng)使用斷言"

          原因大家知道了吧?

          (2)@Resource

          @Resource 是JDK1.6支持的注解,由J2EE提供,需要導(dǎo)入包javax.annotation.Resource。默認(rèn)按照名稱進(jìn)行裝配,名稱可以通過name屬性進(jìn)行指定。也提供按照byType 注入。

          @Resource有兩個(gè)重要的屬性:name 和 type,而Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為bean的類型。

          ?@Resource(name?=?"userDaoImpl2",type?=?UserDaoImpl.class)
          ????private?UserDao?userDao
          ;

          如果沒有指定name屬性,當(dāng)注解寫在字段上時(shí),默認(rèn)取字段名,按照名稱查找。

          當(dāng)注解標(biāo)注在屬性的setter方法上,即默認(rèn)取屬性名作為bean名稱尋找依賴對(duì)象。

          當(dāng)找不到與名稱匹配的bean時(shí)才按照類型進(jìn)行裝配。但是需要注意的是,如果name屬性一旦指定,就只會(huì)按照名稱進(jìn)行裝配。

          示例:

          public?class?TestServiceImpl?{
          ????//?下面兩種@Resource只要使用一種即可
          ????@Resource(name="userDao")
          ????private?UserDao?userDao;?//?用于字段上
          ????
          ????@Resource(name="userDao")
          ????public?void?setUserDao(UserDao?userDao)?{?//?用于屬性的setter方法上
          ????????this.userDao?=?userDao;
          ????}
          }

          注:最好是將@Resource放在setter方法上,因?yàn)檫@樣更符合面向?qū)ο蟮乃枷耄ㄟ^set、get去操作屬性,而不是直接去操作屬性。

          @Resource裝配順序:

          ①如果同時(shí)指定了name和type,則從Spring上下文中找到唯一匹配的bean進(jìn)行裝配,找不到則拋出異常。

          ②如果指定了name,則從上下文中查找名稱(id)匹配的bean進(jìn)行裝配,找不到則拋出異常。

          ③如果指定了type,則從上下文中找到類似匹配的唯一bean進(jìn)行裝配,找不到或是找到多個(gè),都會(huì)拋出異常。

          ④如果既沒有指定name,又沒有指定type,則自動(dòng)按照byName方式進(jìn)行裝配;如果沒有匹配,則回退為一個(gè)原始類型進(jìn)行匹配,如果匹配則自動(dòng)裝配。

          @Resource的作用相當(dāng)于@Autowired,只不過@Autowired按照byType自動(dòng)注入。


          國(guó)家出手,開始整治互聯(lián)網(wǎng)加班了


          京東裁員殺紅眼了!說要給n+1,員工簽字后,公司又反悔了!


          騰訊云Java工程師一面 + 被撈一面 + 二面面經(jīng)

          —?【 THE END 】—
          公眾號(hào)[程序員黃小斜]全部博文已整理成一個(gè)目錄,請(qǐng)?jiān)诠娞?hào)里回復(fù)「m」獲取!

          最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù) PDF?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。

          謝謝支持喲 (*^__^*)

          瀏覽 22
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲AV成人无码久久精品麻豆 | 国产精品久久久久久久久咪咪 | 天天撸在线观看 | 青草久久茄子视频 | 影音先锋最新av资源 |