最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Spring框架中@Autowired和@Resource的區(qū)別

 更新時間:2022年10月29日 08:50:01   作者:阿桿  
最近review別人代碼的時候,看到了一些@Autowired不一樣的用法,覺得有些意思,下面這篇文章主要給大家介紹了關(guān)于Spring框架中@Autowired和@Resource區(qū)別的相關(guān)資料,需要的朋友可以參考下

前言

寫過Spring框架的同學(xué)應(yīng)該都知道,Spring當(dāng)中使用字段注入的時候既可以用 @Autowired 又可以用 @Resource,但是當(dāng)我使用 @Autowired,idea會提示我說,不建議使用字段注入:

但如果我用的是 @Resource,就不會有這樣的提示:

于是在好奇心的驅(qū)使下,我探究了一下他們兩者的區(qū)別,并了解了為什么idea會對 @Autowired 發(fā)出弱警告,在這里分享給大家。

默認(rèn)注入方式不同

  • @Autowired 默認(rèn)的注入方式為byType(根據(jù)類型進(jìn)行匹配),也就是說會優(yōu)先根據(jù)接口類型去匹配并注入 Bean (接口的實(shí)現(xiàn)類),如果想要指定名稱,可以通過 @Qualifier 配合使用。

    @Autowired
    private UserSafetyMapper userSafetyMapper;
    
    // 或
    @Autowired @Qualifier("userSafetyMapper")
    private UserSafetyMapper userSafetyMapper;
  • @Resource 默認(rèn)注入方式為 byName(根據(jù)命名進(jìn)行匹配)。如果無法通過名稱匹配到對應(yīng)的實(shí)現(xiàn)類的話,注入方式會變?yōu)閎yType。

    • 如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進(jìn)行裝配,找不到則拋出異常;
    • 如果指定了name,則從上下文中查找名稱(id)匹配的bean進(jìn)行裝配,找不到則拋出異常;
    • 如果指定了type,則從上下文中找到類型匹配的唯一bean進(jìn)行裝配,找不到或者找到多個,都會拋出異常;
    • 如果既沒有指定name,又沒有指定type,則自動按照byName方式進(jìn)行裝配;如果沒有匹配,則回退為一個原始類型進(jìn)行匹配,如果匹配則自動裝配。
    // 1.默認(rèn)注入方式
    @Resource
    private UserSafetyMapper userSafetyMapper;
    
    // 2.指定注入方式
    @Resource(name = "userSafetyMapper", type = UserSafetyMapper.class)
    private UserSafetyMapper userSafetyMapper;

提供者不同

@Autowired 是spring提供的注解,@Resource 是JDK提供的注解。其實(shí)這也是為什么idea會對 @Autowired 發(fā)出警告,而不會對@Resource發(fā)出警告的原因。

根據(jù)我查閱的一些資源和一點(diǎn)個人理解,得出以下分析:

@Autowired 是Spring提供的,它只能適用于Spring,是特定IOC提供的特定注解,這就導(dǎo)致了程序和框架的強(qiáng)耦合,一旦換用了其他的IOC框架,就會導(dǎo)致失效,無法支持注入。而 @Resource 是Java提供的一種標(biāo)準(zhǔn),一般的IOC容器應(yīng)該去主動對 @Resource 做兼容,這樣我們即使換了其他的框架,也可以正常使用字段注入的功能。

不過話又說回來,我們在搭建一個項(xiàng)目的時候,剛開始選好框架了,以后很大可能就不會再去更換為其他的框架了,即使字段注入松耦合了,但其實(shí)還有其他更多的東西需要去修改,所以我個人認(rèn)為用這兩個都可以,具體使用哪個還得看公司的編碼規(guī)范,個人項(xiàng)目的話,統(tǒng)一使用一個就好了。

補(bǔ)充:@Resource的裝配順序如下

如果同時指定了name和type,流程如下:

如果指定了name,流程如下:

只是指定了@Resource注解的name,則按name后的名字去bean元素里查找有與之相等的name屬性的bean。

 如果指定了type,流程如下:

只指定@Resource注解的type屬性,則從上下文中找到類型匹配的唯一bean進(jìn)行裝配,找不到或者找到多個,都會拋出異常。

如果既沒有指定name,也沒有指定type,流程如下:

既不指定name屬性,也不指定type屬性,則自動按byName方式進(jìn)行查找。如果沒有找到符合的bean,則回退為一個原始類型進(jìn)行進(jìn)行查找,如果找到就注入。

總結(jié)

到此這篇關(guān)于Spring框架中@Autowired和@Resource區(qū)別的文章就介紹到這了,更多相關(guān)Spring @Autowired和@Resource區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 編寫調(diào)用新浪微博API的Java程序來發(fā)送微博

    編寫調(diào)用新浪微博API的Java程序來發(fā)送微博

    這篇文章主要介紹了編寫調(diào)用新浪微博API的Java程序來發(fā)送微博的方法,只是展示了一個基本的程序框架而非一個完整的圖形化軟件:)需要的朋友可以參考下
    2015-11-11
  • redis scan命令導(dǎo)致redis連接耗盡,線程上鎖的解決

    redis scan命令導(dǎo)致redis連接耗盡,線程上鎖的解決

    這篇文章主要介紹了redis scan命令導(dǎo)致redis連接耗盡,線程上鎖的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 詳解Java中Dijkstra(迪杰斯特拉)算法的圖解與實(shí)現(xiàn)

    詳解Java中Dijkstra(迪杰斯特拉)算法的圖解與實(shí)現(xiàn)

    Dijkstra(迪杰斯特拉)算法是典型的單源最短路徑算法,用于計算一個節(jié)點(diǎn)到其他所有節(jié)點(diǎn)的最短路徑。本文將詳解該算法的圖解與實(shí)現(xiàn),需要的可以參考一下
    2022-05-05
  • 一篇文章帶你入門java運(yùn)算符

    一篇文章帶你入門java運(yùn)算符

    這篇文章主要介紹了Java基本數(shù)據(jù)類型和運(yùn)算符,結(jié)合實(shí)例形式詳細(xì)分析了java基本數(shù)據(jù)類型、數(shù)據(jù)類型轉(zhuǎn)換、算術(shù)運(yùn)算符、邏輯運(yùn)算符等相關(guān)原理與操作技巧,需要的朋友可以參考下
    2021-08-08
  • springboot項(xiàng)目如何設(shè)置時區(qū)

    springboot項(xiàng)目如何設(shè)置時區(qū)

    這篇文章主要介紹了springboot項(xiàng)目如何設(shè)置時區(qū)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringMVC中redirect重定向(帶參數(shù))的3種方式

    SpringMVC中redirect重定向(帶參數(shù))的3種方式

    Spring MVC中做form表單功能提交時,防止用戶客戶端后退或者刷新時重復(fù)提交問題,需要在服務(wù)端進(jìn)行重定向跳轉(zhuǎn),本文主要介紹了SpringMVC中redirect重定向(帶參數(shù))的3種方式,感興趣的可以了解一下
    2024-07-07
  • jdbc實(shí)現(xiàn)用戶注冊功能代碼示例

    jdbc實(shí)現(xiàn)用戶注冊功能代碼示例

    這篇文章主要介紹了jdbc實(shí)現(xiàn)用戶注冊功能,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Mapstruct?@Mapper?@Mapping?使用小結(jié)

    Mapstruct?@Mapper?@Mapping?使用小結(jié)

    這篇文章主要介紹了Mapstruct?@Mapper?@Mapping使用小結(jié),他們用于各個對象實(shí)體間的相互轉(zhuǎn)換,例如數(shù)據(jù)庫底層實(shí)體轉(zhuǎn)為頁面對象,Model?轉(zhuǎn)為?DTO,?DTO?轉(zhuǎn)為其他中間對象,?VO?等等,相關(guān)轉(zhuǎn)換代碼為編譯時自動產(chǎn)生的新文件和代碼,需要的朋友可以參考下
    2023-09-09
  • Spring中的構(gòu)造注入

    Spring中的構(gòu)造注入

    這篇文章主要介紹了Spring中的構(gòu)造注入,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring Boot集成springfox-swagger2構(gòu)建restful API的方法教程

    Spring Boot集成springfox-swagger2構(gòu)建restful API的方法教程

    這篇文章主要給大家介紹了關(guān)于Spring Boot集成springfox-swagger2構(gòu)建restful API的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06

最新評論

黄骅市| 革吉县| 乌兰浩特市| 桐柏县| 安徽省| 丘北县| 威海市| 大丰市| 吴江市| 抚松县| 台前县| 盘锦市| 康乐县| 沈阳市| 灵丘县| 合江县| 盐亭县| 晋江市| 印江| 合水县| 定安县| 滨州市| 义乌市| 巩留县| 宝清县| 酒泉市| 濉溪县| 介休市| 隆昌县| 开江县| 鄂托克前旗| 望都县| 黄平县| 十堰市| 榕江县| 洪洞县| 汾西县| 宜川县| 石城县| 临沧市| 鸡东县|