欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

@AutoWired與@Resource及@Qualifier注解

spring不但支持自己定義的@Autowired注解(所以Autowired與Spring是強(qiáng)相關(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 實(shí)例的時候就會調(diào)用該方法。

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

附:最近見到了不少將此注解標(biāo)注在構(gòu)造函數(shù)上的情況,如以下場景:
類A需要在初始化立刻執(zhí)行某個操作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)注的方法會在所有屬性注入完成后,獲取此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,按以下方案進(jìn)行:

  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屬性,這時將通過反射機(jī)制使用byName自動注入策略。
  • Resource裝配順序:
    • 如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進(jìn)行裝配,找不到則拋出異常
    • 如果指定了name,則從上下文中查找名稱(id)匹配的bean進(jìn)行裝配,找不到則拋出異常
    • 如果指定了type,則從上下文中找到類型匹配的唯一bean進(jìn)行裝配,找不到或者找到多個,都會拋出異常
    • 如果既沒有指定name,又沒有指定type,則自動按照byName方式進(jìn)行裝配;如果沒有匹配,則回退為一個原始類型進(jìn)行匹配,如果成功則自動裝配;

其他擴(kuò)展

常見定義Bean的注解:

@Controller

@Controller(“Bean的名稱”)

定義控制層Bean,如Action

@Service

@Service(“Bean的名稱”)

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

@Repository

@Repository(“Bean的名稱”)

定義DAO層Bean

@Component

它是一個通用泛化的注解,當(dāng)某個組件不能通過業(yè)務(wù)進(jìn)行歸類時,可以使用這個注解進(jìn)行標(biāo)注。@Controller、@Repository、@Service是基于此注解的擴(kuò)展,查看源碼可以發(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)文章

  • springboot v2.0.3版本多數(shù)據(jù)源配置方法

    springboot v2.0.3版本多數(shù)據(jù)源配置方法

    這篇文章主要介紹了springboot v2.0.3版本多數(shù)據(jù)源配置方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2018-11-11
  • 利用exe4j生成java的exe文件

    利用exe4j生成java的exe文件

    本文主要介紹了利用exe4j生成java的exe文件,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • IDEA中Translation使用及問題解決

    IDEA中Translation使用及問題解決

    本文主要介紹了IDEA中Translation使用及問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 基于SpringMVC接受JSON參數(shù)詳解及常見錯誤總結(jié)

    基于SpringMVC接受JSON參數(shù)詳解及常見錯誤總結(jié)

    下面小編就為大家分享一篇基于SpringMVC接受JSON參數(shù)詳解及常見錯誤總結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 淺談java中定義泛型類和定義泛型方法的寫法

    淺談java中定義泛型類和定義泛型方法的寫法

    下面小編就為大家?guī)硪黄獪\談java中定義泛型類和定義泛型方法的寫法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 詳解java并發(fā)之重入鎖-ReentrantLock

    詳解java并發(fā)之重入鎖-ReentrantLock

    這篇文章主要介紹了java并發(fā)之重入鎖-ReentrantLock,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Spring Data JPA 建立表的聯(lián)合主鍵

    Spring Data JPA 建立表的聯(lián)合主鍵

    這篇文章主要介紹了Spring Data JPA 建立表的聯(lián)合主鍵。本文詳細(xì)的介紹了2種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • Spring Boot 自定義starter的示例代碼

    Spring Boot 自定義starter的示例代碼

    這篇文章主要介紹了Spring Boot 自定義starter的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • java日期處理工具類

    java日期處理工具類

    這篇文章主要為大家詳細(xì)介紹了java日期處理工具類,其次還介紹了日期處理的基礎(chǔ)知識,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 詳解SpringBoot 快速整合Mybatis(去XML化+注解進(jìn)階)

    詳解SpringBoot 快速整合Mybatis(去XML化+注解進(jìn)階)

    本篇文章主要介紹了詳解SpringBoot 快速整合Mybatis(去XML化+注解進(jìn)階),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11

最新評論