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

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

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

@AutoWired與@Resource及@Qualifier注解

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

@PostConstruct

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

@PreDestroy

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

@Autowired

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

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

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

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

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

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

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

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

@Resource

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

其他擴展

常見定義Bean的注解:

@Controller

@Controller(“Bean的名稱”)

定義控制層Bean,如Action

@Service

@Service(“Bean的名稱”)

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

@Repository

@Repository(“Bean的名稱”)

定義DAO層Bean

@Component

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

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

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

注:這幾個注解都依賴于類的無參構(gòu)造,如果未提供,則會在啟動時報錯

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

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

相關(guān)文章

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

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

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

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

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

    解決springboot啟動時報錯的問題ApplicationEventMulticaster not&nbs

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

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

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

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

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

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

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

    Java常用面板之JScrollPane滾動面板實例詳解

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

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

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

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

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

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

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

最新評論

隆林| 临洮县| 托克托县| 阿鲁科尔沁旗| 泗水县| 酒泉市| 宝山区| 酒泉市| 二手房| 青铜峡市| 锡林郭勒盟| 安溪县| 弋阳县| 依兰县| 锡林浩特市| 夏邑县| 南开区| 湟源县| 渭源县| 嘉禾县| 革吉县| 曲水县| 来宾市| 武汉市| 太仆寺旗| 临清市| 拜泉县| 通江县| 长岛县| 荥经县| 普洱| 肇州县| 温州市| 青川县| 高雄县| 鹤峰县| 孟州市| 德阳市| 京山县| 玉溪市| 达拉特旗|