1. 程式人生 > >Spring 源碼分析(四)--自定義標簽的使用

Spring 源碼分析(四)--自定義標簽的使用

div protected 不同 space xsd文件 不同的 handle body img

在之前的代碼分析中,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 源碼分析(四)--自定義標簽的使用