1. 程式人生 > >spring的配置載入原理及原始碼解讀

spring的配置載入原理及原始碼解讀

spring的配置是怎樣載入的,載入配置的同時都幹了什麼,配置的先載入後加載造成的影響
1、spring 配置載入
這裡寫圖片描述
(圖1.1.1)
spring的配置資訊是在spring refresh方法時候在建立beanFactory的時候呼叫的。
這裡寫圖片描述
(圖1.1.2)
這裡寫圖片描述
(圖1.1.3)
這裡寫圖片描述
(圖1.1.3.1)
從原始碼看出spring是按照順序載入檔案中的bean,也就是按照配置檔案的讀取載入順序載入的,為什麼關心順序是因為哪些配置先載入後加載會影響到執行的效果。下面會詳解。
這裡寫圖片描述
(圖1.1.4)
這裡描述的是xml讀取機載並註冊bean描述資訊的實現
這裡寫圖片描述
(圖1.1.5)
這裡寫圖片描述


(圖1.1.6)
這裡寫圖片描述
(圖1.1.7)
這裡寫圖片描述
(圖1.1.8)
這裡寫圖片描述
(圖1.1.9)
以上程式碼是處理配置檔案的讀取,從程式碼看出來除了預設的元素(bean,beans,alias,import這些標籤)沒有使用特殊的解析器,其餘都使用了定義的解析器(在spring標籤使用的解析器)而且是通過元素的名稱來選取自己對應的解析器。這些名稱是使用spring自帶的nameSpaceHandler及自定義的NamespaceHandler,他們都是NamespaceHandlerSupport的子類。

2、spring載入完配置註冊配置的時候都做了什麼呢
下面介紹兩種非常常用的解析器,其餘相關可按照此方法自行檢視原始碼
對於代理而言有時候會選擇出ConfigBeanDefinitionParser解析器(專門處理aspect ()切面的,
有時也會選擇出AnnotationDrivenBeanDefinitionParser ,他是處理事務的代理的配置的等等,都是元素獲取的如:
為什麼說這兩種呢,賣個關子,這兩種非常特殊。
而這兩種都會去註冊自動代理建立者:
這裡寫圖片描述


(圖2.1)
也就說無論事務,還是aspect都是aop的一種,同時在spring中他們都是代理的建立者,也是建言者的建立者。個人認為切面aspectj切面,事務代理,所有代理都是建言者(可能含有多個建言)。
這裡寫圖片描述
(圖2.2)
從以上原始碼看出spring的代理建立者只有這麼多,而使用哪種代理建立者取決於使用了哪種標籤解析器。他們建立者是怎麼註冊的請看下面程式碼

3、配置的先載入後加載造成的影響
這裡寫圖片描述
(圖3.1)
public static final String AUTO_PROXY_CREATOR_BEAN_NAME =
“org.springframework.aop.config.internalAutoProxyCreator”;
名稱為這個的代理建立者bean,當前容器中只有一個,先註冊了就不會在建立第二個了。這個代理建立者的class也不會變。

由於載入配置檔案是順序載入並同時註冊bean配置資訊,那麼如果先載入事務檔案,那麼這個代理建立者bean的例項就會是
InfrastructureAdvisorAutoProxyCreator,就算在再載入aop所在檔案這個bean也不會是AspectJAwareAdvisorAutoProxyCreator了。這個實質性區別影響的非常大,而且非常佔篇幅,我在下一篇針對一個實際問題來說明這個情況。

相關推薦

spring配置載入原理原始碼解讀

spring的配置是怎樣載入的,載入配置的同時都幹了什麼,配置的先載入後加載造成的影響 1、spring 配置載入 (圖1.1.1) spring的配置資訊是在spring refresh方法時候在建立beanFactory的時候呼叫的。 (圖1

Vue.use原理原始碼解讀

vue.use(plugin, arguments) 語法 引數:plugin(Function | Object) 用法: 如果vue安裝的元件型別必須為Function或者是Object<br/>如果是個物件,必須提供install方法 如果是一個函式,會被直接當作install

HashMap和ConcurrentHashMap原理原始碼解讀

前言 Map 這樣的 Key Value 在軟體開發中是非常經典的結構,常用於在記憶體中存放資料。 本篇主要想討論 ConcurrentHashMap 這樣一個併發容器,在正式開始之前我覺得有必要談談 HashMap,沒有它就不會有後面的 ConcurrentHashMa

【集合框架】HashMap原理原始碼解讀

本文加上個人理解,用自己的話表達集合框架及對HashMap細節的理解。 簡介 HashMap是一種利用鍵值對映儲存資料的資料結構,隨著jdk的發展,在jdk1.8中引入了紅黑樹的資料結構和擴容的優化。 Map類常用集合介紹 HashMap實現自java.uti

2,MapReduce原理原始碼解讀

# MapReduce原理及原始碼解讀 [TOC] ### 一、分片 #### 靈魂拷問:為什麼要分片? - **分而治之:**MapReduce(MR)的核心思想就是分而治之;何時分,如何分就要從原理和原始碼來入手。做為碼農大家都知道,不管一個程式多麼複雜,在寫程式碼和學習程式碼之前最重要的就是

HttpClient4.3 連線池引數配置原始碼解讀

目前所在公司使用HttpClient 4.3.3版本傳送Rest請求,呼叫介面。最近出現了呼叫查詢介面服務慢的生產問題,在排查整個呼叫鏈可能存在的問題時(從客戶端發起Http請求->ESB->服務端處理請求,查詢資料並返回),發現原本的HttpClient連線池中的一些引數配置可能存在問題,如de

詳解Spring Boot 配置載入順序屬性載入順序

先給大家介紹下spring boot 配置載入順序,具體內容如下所示: 使用 Spring Boot 會涉及到各種各樣的配置,如開發、測試、線上就至少 3 套配置資訊了。Spring Boot 可以輕鬆的幫助我們使用相同的程式碼就能使開發、測試、線上環境使用不同的配置。 在 Spring B

Spring監聽器之ApplicationListener原理原始碼解析例項

一、原理及原始碼解析 事件:ContextRefreshedEvent、IOCTest_Ext$1[source=我釋出的事件]、ContextClosedEvent;  *  1)、ContextRefreshedEvent事件:  *      1)、容器建立物件:re

執行緒池的工作原理原始碼解讀各常用執行緒池的執行流程圖

有時候花了大把時間去看一些東西卻看不懂,是很 “ 藍瘦 ” 的,花時間也是投資。 本文適合: 曾瞭解過執行緒池卻一直模模糊糊的人 瞭解得差不多卻對某些點依然疑惑的   隨著cpu核數越來越多,不可避免的利用多執行緒技術以充分利用其計算能力。所以,多執

HttpClient 4.3連線池引數配置原始碼解讀

    目前所在公司使用HttpClient 4.3.3版本傳送Rest請求,呼叫介面。最近出現了呼叫查詢介面服務慢的生產問題,在排查整個呼叫鏈可能存在的問題時(從客戶端發起Http請求->ESB->服務端處理請求,查詢資料並返回),發現原本的HttpClien

spring——AOP原理原始碼(一)

教程共分為五篇,從AOP例項的構建及其重要元件、基本執行流程、容器建立流程、關鍵方法呼叫、原理總結歸納等幾個方面一步步走進AOP的世界。 本篇主要為讀者演示構建AOP例項及AOP核心元件分析。   一、專案構建 讀者可直接下載示例工程,或複製以下的程式碼到本地工程開啟教程。 <?xml v

spring——AOP原理原始碼(二)

回顧: 在上一篇中,我們提到@EnableAspectJAutoProxy註解給容器中加入了一個關鍵元件internalAutoProxyCreator的BeanDefinition,實際型別為 AnnotationAwareAspectJAutoProxyCreator的BeanDenation 並且發現這

spring——AOP原理原始碼(三)

  在上一篇中,我們建立並在BeanFactory中註冊了AnnotationAwareAspectJAutoProxyCreator元件。本篇我們將要探究,這個元件是在哪裡以及何時發揮作用的。   除錯的起點   我們直接開始除錯,之前看過的斷點就直接跳過了,一直跳到下一個斷點直到來到 

spring——AOP原理原始碼(四)

前情回顧:   上文我們一路分析了從容器建立開始直到我們的AOP註解匯入的核心元件AnnotationAwareAspectJAutoProxyCreator執行postProcessBeforeInstantiation()方法的整個過程   分析得到:在所有bean建立之前,都會呼叫resolveBefo

CocurrentHashMap實現原理原始碼解析

##1、CocurrentHashMap概念      CocurrentHashMap是jdk中的容器,是hashmap的一個提升,結構圖: 這裡對比在對比hashmap的結構: 可以看出CocurrentHashMap對比HashMa

Faster R-CNN論文原始碼解讀

R-CNN是目標檢測領域中十分經典的方法,相比於傳統的手工特徵,R-CNN將卷積神經網路引入,用於提取深度特徵,後接一個分類器判決搜尋區域是否包含目標及其置信度,取得了較為準確的檢測結果。Fast R-CNN和Faster R-CNN是R-CNN的升級版本,在準確率和實時性方面都得到了較大提升。在F

Spring->aop原理實現學習

部落格轉自 https://www.cnblogs.com/hongwz/p/5764917.html AOP AOP(Aspect Oriented Programming),即面向切面程式設計,可以說是OOP(Object Oriented Programming,面向物件程式設

HashMap實現原理原始碼分析(轉載)

作者: dreamcatcher-cx 出處: <http://www.cnblogs.com/chengxiao/>        雜湊表(hash table)也叫散列表,是一種非常重要的資料結構,應用場景及其豐富,

springmvc載入過程原始碼分析

什麼是springmvc springmvc是基於的spring的一個web層框架。  這張圖是spring的架構體系,從中可以看出springmvc和struts一樣都是屬於一個web層框架,是spring框架的一部分。 springmvc和mvc有什麼區別 mvc是一種

Sprig AOP原理原始碼解析

      在介紹AOP之前,想必很多人都聽說AOP是基於動態代理和反射來實現的,那麼在看AOP之前,你需要弄懂什麼是動態代理和反射及它們又是如何實現的。 想了解JDK的動態代理及反射的實現和原始碼分析,請參見下面三篇文章 JDK的動態代理