Spring 源碼分析(四)--自定義標簽的使用
在之前的代碼分析中,Spring標簽的解析分為 默認標簽和自定義標簽兩種,前一篇文章分析了Spring中對默認標簽的解析過程。
本文將分析Spring中自定義標簽的使用過程:
一:回顧
public class DefaultBeanDefinitionDocumentReader implements BeanDefinitionDocumentReader { /** * Parse the elements at the root level in the document: * "import", "alias", "bean". *@param root the DOM root element of the document */ protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) { if (delegate.isDefaultNamespace(root)) { NodeList nl = root.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { Node node= nl.item(i); if (node instanceof Element) { Element ele = (Element) node; if (delegate.isDefaultNamespace(ele)) { parseDefaultElement(ele, delegate); } else { delegate.parseCustomElement(ele); } } } } else { delegate.parseCustomElement(root); } } }
在DefaultBeanDefinitionDocumentReader 類中,分別對默認標簽和自定義標簽做了不同的解析處理。
二:自定義標簽使用
很多情況下,我們需要為系統提供可配置化支持,簡單的做法可以直接基於Spring的標準bean來配置,但配置較為復雜或者需要更多豐富控制的時候,會顯得非常笨拙。一般的做法會用原生態的方式取解析定義好的XML文件,然後轉化為配置對象。這種方式當然可以解決所有問題,但實現起來比較繁瑣,特別是在配置非常復雜的時候,解析工作是一個不得不考慮的負擔。Spring提供了可擴展Schema的支持,這是一個不錯的折中方案,擴展Spring自定義標簽配置大致需要以下幾個步驟(前提是要把Spring的Core包加入項目中)。
- 創建一個需要擴展的組件
- 定義一個XSD文件描述組件內容
- 創建一個文件,實現BeanDefinitionParser接口,用來解析XSD文件中的定義和組件定義
- 創建一個Handler文件,擴展自NamespaceHandlerSupport,目的是將組件註冊到Spring容器。
- 編寫Spring.handlers和Spring.schemas文件。
(1)創建一個需要擴展的組件
(2)定義一個XSD文件描述組件內容
(3)創建一個文件,實現BeanDefinitionParser接口,用來解析XSD文件中的定義和組件定義
(4)創建一個Handler文件,擴展自NamespaceHandlerSupport,目的是將組件註冊到Spring容器。
(5)編寫Spring.handlers和Spring.schemas文件,默認位置是在工程的/META-INF/文件夾下,當然,你可以通過Spring的擴展或者修改源碼的方式改變路徑。
(6)創建測試配置文件,在配置文件中引入對應的命名空間以及XSD後,便可以直接使用自定義標簽了。
(7)測試
Spring 源碼分析(四)--自定義標簽的使用