溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spring的@Autowierd和@Resource有什么用

發布時間:2021-08-15 10:55:25 來源:億速云 閱讀:189 作者:chen 欄目:開發技術

本篇內容主要講解“spring的@Autowierd和@Resource有什么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“spring的@Autowierd和@Resource有什么用”吧!

目錄
  • 關于@Autowierd && @Resource 你真的了解嗎

    • 1.@Autowierd

    • 2.@Resource

      • 2.1@Resource具體裝配順序,即指定的注入實例的策略

    • 3.注意

      • 3.1 @Autowierd解決

      • 3.2 @Resource解決

    • 4.高級用法

    • @Autowire和@Resource注解對比

      • 一、@Resource是J2EE提供的,@Autowire是Spring提供的

        • 二、兩個注解使用name區別注入的寫法不同

          • 三、然后就沒有什么不同了

          關于@Autowierd && @Resource 你真的了解嗎

          1.@Autowierd

          使用byType注入,默認情況下要求依賴必須存在;配置required=false表示依賴可為null

          spring的@Autowierd和@Resource有什么用

          下面代碼第一個注入是會報錯的,編輯器是會有紅色提示。

          因為代碼中沒有這樣的bean,截圖也能看的出來。

          @Autowired
              private Data data;   //報錯
              @Autowired(required = false) //沒事
              private Data data2;

          spring的@Autowierd和@Resource有什么用

          2.@Resource

          按照ByName自動注入,@Resource有兩個重要的屬性:nametype,而Spring將@Resource注解的 name屬性解析為bean的名字,而type屬性則解析為bean的類型。

          所以,如果使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。

          如果既不制定name也不制定type屬性,這時將通過反射機制使用byName自動注入策略。

          2.1@Resource具體裝配順序,即指定的注入實例的策略

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

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

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

          ④如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有匹配,則回退為一個原始類型進行匹配,如果匹配則自動裝配(即按照byType的方式)

          3.注意

          如果是接口或者抽象類的話那么需要實現類唯一,否則創建實例出錯,或者說當接口或抽象類有n多個實現類(繼承類)時,在注入的必須指定此時要注入的實現類(繼承類)。

          找到兩個實現類,報錯?。?!

          spring的@Autowierd和@Resource有什么用

          3.1 @Autowierd解決

          @Autowierd需要借助@Qualifier來幫助區分使用具體的哪個實現類

          @Autowired
              @Qualifier("userServiceImpl")
              private UserService userService;
          3.2 @Resource解決

          @Resource 可以使用name屬性或者是type屬性來指定想要注入的實現類。

          spring的@Autowierd和@Resource有什么用

          @Resource(name = "userServiceImpl2")
              private UserService userService1;
              @Resource(type = UserServiceImpl.class)
              private UserService userService3;

          4.高級用法

          @Autowierd 注入抽象類時,當抽象類有多個繼承類,可以使用

          @Autowierd List<抽象類> ll;//來獲取所有的子類實現集合

          spring的@Autowierd和@Resource有什么用

          	@Autowired
              private List<UserService> userServices;

          小結:

          • @Autowierd & @Resource 功能相當,都可以注入實例

          • @Autowierd 通過byType的方式注入

          • @Resource 優先使用byName的方式注入,然后使用@Autowire的方式注入

          這就是為什么mybatis自動生成的Mapper文件,你使用@Resouce Idea不會提示紅色下劃線(其實在dao文件的已經被掃描了,但是ieda在編輯的時候找不到,但是在運行中是能夠找到的)

          1.dao層配置

          spring的@Autowierd和@Resource有什么用

          2.mybatis自動生成Mapper文件

          spring的@Autowierd和@Resource有什么用

          3具體情況:一看便知

          看著報錯,其實不會有錯,以為在2中已配置包掃描了。

          spring的@Autowierd和@Resource有什么用

          @Autowired
              private TCommentInfoMapper tCommentInfoMapper;
              
              @Resource
              private TCommentInfoMapper tCommentInfoMapper2;

          @Autowire和@Resource注解對比

          在我看來@Autowire和@Resource有兩個區別:

          一、@Resource是J2EE提供的,@Autowire是Spring提供的

          spring的@Autowierd和@Resource有什么用

          二、兩個注解使用name區別注入的寫法不同

          spring的@Autowierd和@Resource有什么用

          三、然后就沒有什么不同了

          網上很多人專門介紹@Resource能夠用變量名或set方法里的變量名作為對象name來使用,說的好像@Autowire就不能似的.

          spring的@Autowierd和@Resource有什么用

          到此,相信大家對“spring的@Autowierd和@Resource有什么用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

          向AI問一下細節

          免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

          AI

          亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女