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

詳解Spring依賴注入:@Autowired,@Resource和@Inject區(qū)別與實(shí)現(xiàn)原理

 更新時(shí)間:2019年06月14日 09:33:46   作者:本人禿頂程序員  
這篇文章主要介紹了詳解Spring依賴注入:@Autowired,@Resource和@Inject區(qū)別與實(shí)現(xiàn)原理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

一、spring依賴注入使用方式

  • @Autowired是spring框架提供的實(shí)現(xiàn)依賴注入的注解,主要支持在set方法,field,構(gòu)造函數(shù)中完成bean注入,注入方式為通過類型查找bean,即byType的,如果存在多個(gè)同一類型的bean,則使用@Qualifier來指定注入哪個(gè)beanName的bean。
  • 與JDK的@Resource的區(qū)別:@Resource是基于bean的名字,即beanName,來從spring的IOC容器查找bean注入的,而@Autowried是基于類型byType來查找bean注入的。
  • 與JDK的@Inject的區(qū)別:@Inject也是基于類型來查找bean注入的,如果需要指定名稱beanName,則可以結(jié)合使用@Named注解,而@Autowired是結(jié)合@Qualifier注解來指定名稱beanName。

二、spring依賴注入注解的實(shí)現(xiàn)原理

注解處理器

  • 在spring框架內(nèi)部實(shí)現(xiàn)當(dāng)中,注解實(shí)現(xiàn)注入主要是通過bean后置處理器BeanPostProcessor接口的實(shí)現(xiàn)類來生效的。BeanPostProcessor后置處理器是在spring容器啟動(dòng)時(shí),創(chuàng)建bean對(duì)象實(shí)例后,馬上執(zhí)行的,對(duì)bean對(duì)象實(shí)例進(jìn)行加工處理。
  • @Autowired是通過BeanPostProcessor接口的實(shí)現(xiàn)類AutowiredAnnotationBeanPostProcessor來實(shí)現(xiàn)對(duì)bean對(duì)象對(duì)其他bean對(duì)象的依賴注入的;
  • @Resource和@Inject是通過BeanPostProcessor接口的實(shí)現(xiàn)類CommonAnnotationBeanPostProcessor來實(shí)現(xiàn)的,其中如名字所述,即公共注解CommonAnotation,CommonAnnotationBeanPostProcessor是spring中統(tǒng)一處理JDK中定義的注解的一個(gè)BeanPostProcessor。該類會(huì)處理的注解還包括@PostConstruct,@PreDestroy等。

注解處理器的激活條件

  • AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor添加到spring容器的BeanPostProcessor的條件,即激活這些處理器的條件如下:

1.基于xml的spring配置

  • 在對(duì)應(yīng)的spring容器的配置xml文件中,如applicationContext.xml,添加<context:annotation-config />和<context:component-scan />,或者只使用<context:component-scan />。
  • 兩者的區(qū)別是<context:annotation-config />只查找并激活已經(jīng)存在的bean,如通過xml文件的bean標(biāo)簽生成加載到spring容器的,而不會(huì)去掃描如@Controller等注解的bean,查找到之后進(jìn)行注入;而<context:component-scan />除了具有<context:annotation-config />的功能之外,還會(huì)去加載通過basePackages屬性指定的包下面的,默認(rèn)為掃描@Controller,@Service,@Component,@Repository注解的類。不指定basePackages則是類路徑下面,或者如果使用注解@ComponentScan方式,則是當(dāng)前類所在包及其子包下面。

2.基于配置類的spring配置

  • 如果是基于配置類而不是基于applicationContext.xml來對(duì)spring進(jìn)行配置,如SpringBoot,則在內(nèi)部使用的IOC容器實(shí)現(xiàn)為AnnotationConfigApplicationContext或者其派生類,在AnnotationConfigApplicationContext內(nèi)部會(huì)自動(dòng)創(chuàng)建和激活以上的BeanPostProcessor。
  • 如果同時(shí)存在基于xml的配置和配置類的配置,而在注入時(shí)間方面,基于注解的注入先于基于XML的注入,所以基于XML的注入會(huì)覆蓋基于注解的注入。

總結(jié)

  • @Autowired是Spring自帶的,@Inject和@Resource都是JDK提供的,其中@Inject是JSR330規(guī)范實(shí)現(xiàn)的,@Resource是JSR250規(guī)范實(shí)現(xiàn)的,而Spring通過BeanPostProcessor來提供對(duì)JDK規(guī)范的支持。
  • @Autowired、@Inject用法基本一樣,不同之處為@Autowired有一個(gè)required屬性,表示該注入是否是必須的,即如果為必須的,則如果找不到對(duì)應(yīng)的bean,就無法注入,無法創(chuàng)建當(dāng)前bean。
  • @Autowired、@Inject是默認(rèn)按照類型匹配的,@Resource是按照名稱匹配的。如在spring-boot-data項(xiàng)目中自動(dòng)生成的redisTemplate的bean,是需要通過byName來注入的。如果需要注入該默認(rèn)的,則需要使用@Resource來注入,而不是@Autowired。
  • 對(duì)于@Autowire和@Inject,如果同一類型存在多個(gè)bean實(shí)例,則需要指定注入的beanName。@Autowired和@Qualifier一起使用,@Inject和@Name一起使用。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中關(guān)于子類覆蓋父類的拋出異常問題

    Java中關(guān)于子類覆蓋父類的拋出異常問題

    今天小編就為大家分享一篇關(guān)于Java中關(guān)于子類覆蓋父類的拋出異常問題,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • SpringBoot項(xiàng)目與Nacos配置全過程

    SpringBoot項(xiàng)目與Nacos配置全過程

    本文介紹了如何在SpringBoot項(xiàng)目中使用Nacos作為配置中心,實(shí)現(xiàn)動(dòng)態(tài)配置管理和實(shí)時(shí)更新配置的能力,通過配置命名空間和yml文件,創(chuàng)建SpringBoot項(xiàng)目并添加Nacos依賴,編寫Controller和啟動(dòng)類,配置Tomcat啟動(dòng)程序,最終在Nacos服務(wù)端注冊(cè)成功
    2024-11-11
  • Java 添加、修改、讀取、復(fù)制、刪除Excel批注的實(shí)現(xiàn)

    Java 添加、修改、讀取、復(fù)制、刪除Excel批注的實(shí)現(xiàn)

    這篇文章主要介紹了Java 添加、修改、讀取、復(fù)制、刪除Excel批注的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 詳解安裝Eclipse Maven插件的幾種方法

    詳解安裝Eclipse Maven插件的幾種方法

    本篇文章主要介紹了詳解安裝Eclipse Maven插件的幾種方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • Lombok使用@Tolerate實(shí)現(xiàn)沖突兼容問題

    Lombok使用@Tolerate實(shí)現(xiàn)沖突兼容問題

    這篇文章主要介紹了Lombok使用@Tolerate實(shí)現(xiàn)沖突兼容問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 簡(jiǎn)單實(shí)現(xiàn)Java驗(yàn)證碼功能

    簡(jiǎn)單實(shí)現(xiàn)Java驗(yàn)證碼功能

    這篇文章主要為大家詳細(xì)介紹了簡(jiǎn)單實(shí)現(xiàn)Java驗(yàn)證碼功能的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java中復(fù)雜的Synchronized關(guān)鍵字使用方法詳解

    Java中復(fù)雜的Synchronized關(guān)鍵字使用方法詳解

    Synchronized關(guān)鍵字是一個(gè)種鎖,其有很多名字,例如重量級(jí)鎖、悲觀鎖、可重入鎖、、非公平、對(duì)象鎖等等,這篇文章主要給大家介紹了關(guān)于Java中復(fù)雜的Synchronized關(guān)鍵字使用方法的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Java動(dòng)態(tài)加載類示例詳解

    Java動(dòng)態(tài)加載類示例詳解

    這篇文章主要給大家介紹了關(guān)于Java動(dòng)態(tài)加載類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Spring?Security?基于URL的權(quán)限判斷源碼解析

    Spring?Security?基于URL的權(quán)限判斷源碼解析

    這篇文章主要介紹了Spring?Security?基于URL的權(quán)限判斷問題,我們想要實(shí)現(xiàn)自己的基于請(qǐng)求Url的授權(quán)只需自定義一個(gè)?AccessDecisionManager即可,接下來跟隨小編一起看看實(shí)現(xiàn)代碼吧
    2021-12-12
  • spring?boot集成p6spy的最佳實(shí)踐

    spring?boot集成p6spy的最佳實(shí)踐

    這篇文章主要介紹了spring?boot集成p6spy的最佳實(shí)踐-p6spy-spring-boot-starter的項(xiàng)目案例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02

最新評(píng)論

内乡县| 元谋县| 汉中市| 长顺县| 晋城| 乐亭县| 昭平县| 阿拉善盟| 仁怀市| 鄂托克旗| 甘德县| 广宁县| 鄱阳县| 抚远县| 贺州市| 镇雄县| 广昌县| 阿鲁科尔沁旗| 金平| 罗甸县| 恩平市| 阿坝县| 伊通| 陈巴尔虎旗| 吉首市| 夹江县| 永登县| 景宁| 揭阳市| 防城港市| 姚安县| 青阳县| 扬州市| 新沂市| 宝清县| 鄂伦春自治旗| 梁河县| 义乌市| 隆子县| 乐业县| 衡南县|