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

Spring中的@AutoWired與@Resource及@Qualifier注解詳解

 更新時(shí)間:2023年11月10日 09:13:39   作者:MrMoving  
這篇文章主要介紹了Spring中的@AutoWired與@Resource及@Qualifier注解詳解,spring不但支持自己定義的@Autowired注解,所以Autowired與Spring是強(qiáng)相關(guān)性,只能在spring框架中使用,而后幾個(gè)注解則不然,需要的朋友可以參考下

@AutoWired與@Resource及@Qualifier注解

spring不但支持自己定義的@Autowired注解(所以Autowired與Spring是強(qiáng)相關(guān)性,只能在spring框架中使用,而后幾個(gè)注解則不然),還支持幾個(gè)由JSR-250規(guī)范定義的注解,它們分別是@Resource、@PostConstruct以及@PreDestroy。

@PostConstruct

相當(dāng)于init-method,使用在方法上,當(dāng)Bean初始化時(shí)執(zhí)行,執(zhí)行順序在@Autowire注解之后。

@PreDestroy

相當(dāng)于destory-method,使用在方法上,當(dāng)Bean銷(xiāo)毀時(shí)執(zhí)行。

@Autowired

@Autowired 注解可以用于 Setter 方法字段、構(gòu)造函數(shù)。

也可用于普通方法,前提是方法必須有至少一個(gè)參數(shù),很少用,此時(shí)會(huì)產(chǎn)生一個(gè)副作用,就是在容器初始化該 Bean 實(shí)例的時(shí)候就會(huì)調(diào)用該方法。

當(dāng)然,前提是執(zhí)行了自動(dòng)裝配,對(duì)于不滿足裝配條件的情況,該方法也不會(huì)被執(zhí)行。

附:最近見(jiàn)到了不少將此注解標(biāo)注在構(gòu)造函數(shù)上的情況,如以下場(chǎng)景:
類(lèi)A需要在初始化立刻執(zhí)行某個(gè)操作method,但此操作需要必須在屬性attribute初始化之后才能進(jìn)行,方案有多種
1.實(shí)現(xiàn)InitializingBean接口,在afterPropertiesSet方法中執(zhí)行method
2.實(shí)現(xiàn)ApplicationListener<ContextRefreshedEvent>接口,在onApplicationEvent方法中執(zhí)行method
3.使用@postConstruct注解method方法,此注解標(biāo)注的方法會(huì)在所有屬性注入完成后,獲取此bean前執(zhí)行
4.屬性attribute不使用自動(dòng)裝配,使用@Autowired注解構(gòu)造函數(shù),并注入attribute

@Autowired
 public A(Attribute attribute) {
	 this.attribute = attribute;
	 method();
 } 

@Autowired按byType自動(dòng)注入,查找指定類(lèi)型的Bean。找不到則拋出異常(可以給 @Autowired 標(biāo)注增加一個(gè) required=false 屬性,以改變這個(gè)行為)。 如果找到多個(gè)bean,按以下方案進(jìn)行:

  1. 選擇其中帶有Primary注解的bean,如果只有一個(gè)直接注入,如果有多個(gè)bean帶有Primary注解則報(bào)錯(cuò)。
  2. 選擇與@Qualifier注解的value值名稱(chēng)相同的Bean,如下,如果有名為zhangsan的User Bean,則注入,無(wú)則報(bào)錯(cuò)
	@Autowired 
 	@Qualifier("zhangsan")
 	public User user;

    // 注解在set方法上的例子
    @Autowired   
    public void setUserDao(@Qualifier("userDao") UserDao userDao) {   
        this.userDao = userDao;   
    }  

@Resource

  • @Resource默認(rèn)按 byName自動(dòng)注入。@Resource有兩個(gè)屬性是比較重要的,分是name和type,Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為bean的類(lèi)型。所以如果使用name屬性,則使用byName的自動(dòng)注入策略(同時(shí)也會(huì)判斷該name的Bean是否類(lèi)型匹配,不存在或不匹配將拋出異常),而使用type屬性時(shí)則使用byType自動(dòng)注入策略。如果既不指定name也不指定type屬性,這時(shí)將通過(guò)反射機(jī)制使用byName自動(dòng)注入策略。
  • Resource裝配順序:
    • 如果同時(shí)指定了name和type,則從Spring上下文中找到唯一匹配的bean進(jìn)行裝配,找不到則拋出異常
    • 如果指定了name,則從上下文中查找名稱(chēng)(id)匹配的bean進(jìn)行裝配,找不到則拋出異常
    • 如果指定了type,則從上下文中找到類(lèi)型匹配的唯一bean進(jìn)行裝配,找不到或者找到多個(gè),都會(huì)拋出異常
    • 如果既沒(méi)有指定name,又沒(méi)有指定type,則自動(dòng)按照byName方式進(jìn)行裝配;如果沒(méi)有匹配,則回退為一個(gè)原始類(lèi)型進(jìn)行匹配,如果成功則自動(dòng)裝配;

其他擴(kuò)展

常見(jiàn)定義Bean的注解:

@Controller

@Controller(“Bean的名稱(chēng)”)

定義控制層Bean,如Action

@Service

@Service(“Bean的名稱(chēng)”)

定義業(yè)務(wù)層Bean

@Repository

@Repository(“Bean的名稱(chēng)”)

定義DAO層Bean

@Component

它是一個(gè)通用泛化的注解,當(dāng)某個(gè)組件不能通過(guò)業(yè)務(wù)進(jìn)行歸類(lèi)時(shí),可以使用這個(gè)注解進(jìn)行標(biāo)注。@Controller、@Repository、@Service是基于此注解的擴(kuò)展,查看源碼可以發(fā)現(xiàn)這三個(gè)注解上都標(biāo)注了@Component 注解

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";
}

以上幾個(gè)注解效果是完全一樣的,只是后三個(gè)用于方便標(biāo)示該Bean的業(yè)務(wù)范圍。

注:這幾個(gè)注解都依賴(lài)于類(lèi)的無(wú)參構(gòu)造,如果未提供,則會(huì)在啟動(dòng)時(shí)報(bào)錯(cuò)

No default constructor found; nested exception is java.lang.NoSuchMethodException

到此這篇關(guān)于Spring中的@AutoWired與@Resource及@Qualifier注解詳解的文章就介紹到這了,更多相關(guān)@AutoWired與@Resource及@Qualifier注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring中的@RestControllerAdvice注解使用方法解析

    Spring中的@RestControllerAdvice注解使用方法解析

    這篇文章主要介紹了Spring中的@RestControllerAdvice注解使用方法解析,@RestControllerAdvice是Controller的增強(qiáng) 常用于全局異常的捕獲處理 和請(qǐng)求參數(shù)的增強(qiáng),需要的朋友可以參考下
    2024-01-01
  • java9學(xué)習(xí)系列之在docker中如何運(yùn)行java9

    java9學(xué)習(xí)系列之在docker中如何運(yùn)行java9

    最近在學(xué)習(xí)java9,所以將學(xué)習(xí)中遇到的一些知識(shí)點(diǎn)分享給大家,下面這篇文章主要給大家介紹了java9學(xué)習(xí)系列之在docker中如何運(yùn)行java9的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-09-09
  • 解決springboot啟動(dòng)時(shí)報(bào)錯(cuò)的問(wèn)題ApplicationEventMulticaster not initialized

    解決springboot啟動(dòng)時(shí)報(bào)錯(cuò)的問(wèn)題ApplicationEventMulticaster not&nbs

    這篇文章主要介紹了解決springboot啟動(dòng)時(shí)報(bào)錯(cuò)的問(wèn)題ApplicationEventMulticaster not initialized,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Java調(diào)用新浪api通過(guò)Ip查詢地區(qū)

    Java調(diào)用新浪api通過(guò)Ip查詢地區(qū)

    這篇文章主要介紹了Java調(diào)用新浪接口通過(guò)Ip查詢地區(qū),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Mybatis的mapper文件中#和$的區(qū)別示例解析

    Mybatis的mapper文件中#和$的區(qū)別示例解析

    MyBatis的mapper文件中,#{}和${}是兩種參數(shù)占位符,核心差異在于參數(shù)解析方式、SQL 注入風(fēng)險(xiǎn)、適用場(chǎng)景,以下從底層原理、使用場(chǎng)景、示例等維度詳細(xì)解析,本文介紹Mybatis的mapper文件中#和$的區(qū)別,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • java IO流 之 輸出流 OutputString()的使用

    java IO流 之 輸出流 OutputString()的使用

    這篇文章主要介紹了java IO流 之 輸出流 OutputString()的使用的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Java常用面板之JScrollPane滾動(dòng)面板實(shí)例詳解

    Java常用面板之JScrollPane滾動(dòng)面板實(shí)例詳解

    這篇文章主要介紹了Java常用面板JScrollPane的簡(jiǎn)單介紹和一個(gè)相關(guān)實(shí)例,,需要的朋友可以參考下。
    2017-08-08
  • Mybatis基于注解實(shí)現(xiàn)多表查詢功能

    Mybatis基于注解實(shí)現(xiàn)多表查詢功能

    這篇文章主要介紹了Mybatis基于注解實(shí)現(xiàn)多表查詢功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java單鏈表的實(shí)現(xiàn)代碼

    Java單鏈表的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java單鏈表的實(shí)現(xiàn)代碼的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • SpringBoot實(shí)現(xiàn)敏感配置信息加密與解密

    SpringBoot實(shí)現(xiàn)敏感配置信息加密與解密

    SpringBoot支持多種配置加載方式,不管用哪種方式,敏感信息(比如數(shù)據(jù)庫(kù)密碼、Redis密碼、第三方API密鑰)如果明文存儲(chǔ),都會(huì)有泄露風(fēng)險(xiǎn),下面我們就來(lái)聊聊如何對(duì)敏感配置信息加密與解密吧
    2025-07-07

最新評(píng)論

衡阳市| 武山县| 曲阳县| 长宁县| 腾冲县| 镇平县| 瑞昌市| 方山县| 崇文区| 禄丰县| 邹平县| 房山区| 江油市| 通榆县| 红原县| 五常市| 马公市| 白河县| 淳化县| 咸阳市| 四平市| 怀集县| 浦江县| 巴中市| 光泽县| 尼木县| 宁晋县| 大洼县| 罗山县| 大荔县| 泾源县| 浦北县| 龙陵县| 洛川县| 子洲县| 贵南县| 石城县| 林芝县| 乌鲁木齐市| 措美县| 麻江县|