Spring第七彈—依賴注入之注解方式注入及編碼解析@Resource原理


    注入依賴對象可以采用手工裝配或自動裝配,在實際應用中建議使用手工裝配,因為自動裝配會產生未知情況,開發人員無法預見最終的裝配結果。

手工裝配依賴對象 

手工裝配依賴對象,在這種方式中又有兩種編程方式

  1. 在xml配置文件中,通過在bean節點下配置,上邊博客已經講解,再次不在綴余。
  1. 在java代碼中使用@Autowired或@Resource注解方式進行裝配。但我們需要在xml配置文件中配置以下信息:

 

PS:

這個配置隱式注冊了多個對注解進行解析處理的處理器:AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor,RequiredAnnotationBeanPostProcessor

PS:之前我寫過注解原理的博客,再此多說一句,注解本身和xml一樣都是用於配置的,本身並不能干活,它之所以能干活,是因為它背后存在着處理器(也就是對應api)。

PS: 需要引入common-annotations.jar文件。

@Autowired和@Resource注解詳解

在java代碼中使用@Autowired或@Resource注解方式進行裝配,這兩個注解的區別是:@Autowired 默認按類型裝配,@Resource默認按名稱裝配,當找不到與名稱匹配的bean才會按類型裝配。

@Autowired注解是按類型裝配依賴對象,默認情況下它要求依賴對象必須存在,如果允許null值,可以設置它required屬性為false。如果我們想使用按名稱裝配,可以結合@Qualifier注解一起使用。如下:

@Resource注解和@Autowired一樣,也可以標注在字段或屬性的setter方法上,但它默認按名稱裝配。名稱可以通過@Resource的name屬性指定,如果沒有指定name屬性,當注解標注在字段上,即默認取字段的名稱作為bean名稱尋找依賴對象,當注解標注在屬性的setter方法上,即默認取屬性名作為bean名稱尋找依賴對象。

注意:如果沒有指定name屬性,並且按照默認的名稱仍然找不到依賴對象時, @Resource注解會回退到按類型裝配。但一旦指定了name屬性,就只能按名稱裝配了。

PS:@Resource在jdk中已經存在,不屬於Spring,所以盡量使用這個注解。

編碼剖析@Resource的原理:

自定義注解(模仿@Resource):

PersonSevicebean:

自定義注解(zmcResource)處理器:


免責聲明!

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



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