關於 java中的 @Resource注解和@Autowired注解


@Resource (建議用)

類全稱: javax.annotation.Resource

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

指定注入方式:

    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匹配原始類型), 找不到或者找到多個則拋出異常 .

 

@Autowired 

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

默認注入方式: byType

Bean查找規則:

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

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

 

 

注意:@Autowired  有時候會出現警告

Spring屬於第三方的,J2EE是Java自己的東西。使用@Resource可以減少代碼和Spring之間的耦合。


免責聲明!

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



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