spring源碼分析——依賴注入(Resource注解注入以及 @Value注入)


 

  接上一節看一下Resource注解的注入,@Resource注解的注入主要依賴於CommonAnnotationBeanPostProcessor對象,這個埋點的過程與@Autowired類似,

包括BeanDefinition的注冊、對象的實例化、搜集類上的注解信息、攔截getBean實例化對象。

一:@Resource注解分析

1:准備工作

 運行結果:

 

 

 

2:搜集注解信息

 

 

 

 

 

 

 

 

 搜集完注解信息后,封裝到InjectionMetadata對象上,緩存到injectionMetadataCache集合中

 

 

 類上的注解信息搜集完成后,看一下攔截方法: populateBean方法

 

 

 

 

 

 

這里有個getResourceToInject方法,獲取依賴的bean對象:

 

 

 

 

 

 

 

Resource注解基本和Autowired注解類似,就是攔截后,獲取依賴的bean的流程有少許差異。

 

二:@Value注解分析

1:准備工作,加一個level字段,在該屬性上加注解@Value信息

 

配置信息properties 

 

 運行結果,注入成功

 

 

2:源碼分析,@Value注解使用的是AutowiredAnnotationBeanPostProcessor類

先看一下搜集注解信息

 

 

 

 

AutowiredAnnotationBeanPostProcessor類主要搜集@Autowired和@Value注解的元數據信息

 

 在來看一下populateBean中的攔截設置屬性的方法:

 

 

從緩存中取出注解,然后注入

 

 

 

 

 

 

 

 

 

 

 將value值返回,執行inject這個動作,@Value注解注入完成。

 

總結:Resource注解是jdk提供的,它的實現主要依賴CommonAnnotationBeanPostProcessor,@Value注解是spring框架提供

和Autowired注解一樣,是依賴於AutowiredAnnotationBeanPostProcessor,流程基本相同,都會注冊、實例化BeanPostProcessor對象,

在實例化對象完成后,設置屬性值之前polulateBean之前,會搜集類上的注解元數據信息,然后在polulalteBean中攔截,執行

BeanPostProcessor中的方法,反射注入依賴的值。

 


免責聲明!

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



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