@Resource注解和@Autowired注解


原創:轉載需注明原創地址 https://www.cnblogs.com/fanerwei222/p/11770982.html

 

1. @Resource

  類來源: javax(Java擴展包)

  類全稱: javax.annotation.Resource

  默認注入方式: byName(反射機制)

  定義對象: 變量, set方法

  重要屬性: name(Spring解析為Bean的名稱), type(Spring解析為Bean的Java類型)

  指定注入方式:

    a) 如果使用name屬性,則使用byName自動注入策略--> @Resource(name = "good")

    b) 如果使用type屬性,則使用byType自動注入策略--> @Resource(type = java.lang.String.class)

  Bean查找規則:

    a) 同時指定了name和type, 則在Spring上下文中找到唯一匹配的Bean, 找不到拋出異常--> @Resource(name = "good", type = java.lang.String.class)

    b) 指定了name, 則在Spring上下文中找到名稱(使用注解注冊的Bean的name一般為類名稱的駝峰寫法)匹配的Bean進行裝配,找不到或者找到多個則拋出異常-->@Resource(name = "good")

    c) 指定了type, 則在Spring上下文中找到匹配的唯一Bean進行裝配, 找不到或者找到多個則拋出異常-->@Resource(type = java.lang.String.class)

    d) 沒有指定name或者type, 按照byName進行查找裝配, 如果沒有匹配, 則回退到一個原始類型(比如String hello變量的原始類型就是java.lang.String)進行匹配(根據type匹配原始類型), 找不到或者找到多個則拋出異常 .

 

2. @Autowired

  類來源: Spring

  類全稱: org.springframework.beans.factory.annotation.Autowired

  默認注入方式: byType

  定義對象: 變量, 構造器注入, set方法

  重要屬性: Qualifier,required

  指定注入方式: 默認為byType

  Bean查找規則:

    a) 默認是要對象必須存在的, 如果允許對象為null, 則要設置 required = false

    b) 如果是根據類型查找, 有多個相同類型(is-a)的實現類,那么會拋出異常 , 此時需要加上@Qualifier("hello")注解指定注入的Bean的標識名稱(不一定特指id或者name,就是指的@Service("thisTarget")中的thisTarget這個值,也不排除沒有這個值自動查找其id或者name的可能性), 則按照標識名稱去查找,若有多個相同名稱的Bean,則拋出異常.

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM