簡介
Spring的配置文件是我們使用其功能的開始,本文旨在理清Spring在對配置文件的讀取和解析的關鍵節點。
因爲在讀源碼的時候很容易陷入對其中的細枝末節的糾結,而忘了我們本來的目的是爲了瞭解框架本身的架構和原理而非對編程中的奇淫巧技的追逐。
和我們對一般文件的處理一樣,Spring對配置文件的處理分爲兩步 :
- 找到文件並載入內存中
- 對文件內容進行解析轉換爲自己定義好的JAVA對象
XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(new ClassPathResource("spring.xml"));
上面這句代碼執行的過程如圖 : 其中的細節就不贅述了
其中的關鍵類 :
- XmlBeanFactory / ClassPathXmlApplicationContext
- XmlBeanDefinitionReader :負責讀取配置文件
- BeanDefinitionParserDelegate : 負責解析配置文件的標籤
- XmlReaderContext : 持有配置文件上下文環境和所有bean的定義
- AbstractBeanDefinition : 對xml文件中Spring標籤元素的抽象
幾個好用的工具類 :
- ObjectUtils
- ClassUtils
- BeanFactoryUtils
- ReflectionUtils
Spring對自定義標籤的解析 :
Spring默認的標籤 namespace爲 : http://www.springframework.org/schema/beans
對不是該namespace的都視爲自定義標籤,比如 : <tx:advice>、<context:component-scan> 、<dubbo:service>
對自定義標籤的解析類一般命名規則爲 前綴 + NamespaceHandler , 可以在對應的類中找到解析邏輯 , 比如 TxNamespaceHandler