自己構建一個Spring自定義標籤以及原理講解

自己構建一個Spring自定義標籤以及原理講解

平時不論是在Spring配置文件中引入其他中間件(比如dubbo),還是使用切面時,都會用到自定義標籤。那麼配置文件中的自定義標籤是如何發揮作用的,或者說程序是如何通過你添加的自定義標籤實現相應的功能的呢?且看下文。

通過對本文的閱讀,你會在閱讀涉及到自定義標籤的源碼功能時事半功倍,而且還可以自己動手做出一個自己的自定義標籤。

 先呈上我自己在本地實現自定義標籤的代碼及對應講解:

1、先無腦輸出一個測試要用到的Bean類

View Code
2、spring的xml配置文件,以及在配置文件中引入自定義標籤跟它的命名空間

View Code
3、從2中可以看到,命名空間中我添加了自定義的xmlns:myname="http://www.zzq.com/schema/user",以及http://www.zzq.com/schema/userhttp://www.zzq.com/schema/user.xsd

其中緊跟xmlns冒號後面的部分,就是我們自定義標籤引號前的部分,比如此處定義了myname,那麼自定義標籤中我就可以這樣引用了,其中的XXX則是在命名空間中定義的myPw。

中間http://www.zzq.com/schema/user對應此自定義標籤的handler,放在Spring.handlers中。

最後的http://www.zzq.com/schema/user.xsd則定義了此自定義標籤的XXX,即自定義標籤冒號後面有什麼,由此xsd定義,放在Spring.schemas中。

Spring.handlers跟Spring.schemas文件都放在META-INF目錄下,因爲spring會默認去此目錄下讀。

Spring.handlers如下所示:

http://www.zzq.com/schema/user=myDemoHome.springElement.bdParser.UserNamespaceHandler
Spring.schemas如下所示:

http://www.zzq.com/schema/user.xsd=META-INF/spring-test.xsd
3.1 自定義標籤的解析類UserNamespaceHandler構建

View Code
就是對element中的標籤進行解析處理,完成從xml中的標籤屬性向對象值的轉化

3.2 自定義標籤解析類的註冊 UserNamespaceHandler

View Code
此處的意思就是當遇到myPw這個標籤的時候,往spring容器中注入這個標籤的解析類,以完成後續對標籤屬性的解析。看到此處,各位道友有沒有想起AOP的自定義註解aspectj-autoproxy 的解析呢?其實套路都是一樣的。

3.3 xsd文件spring-test.xsd的定義

View Code
此文件規定了自定義註解的標籤,以及對應的屬性

4、測試類ElementTest

View Code
再附上一張所用類的位置關係圖

至此大功告成,最後運行一下測試類:

功德圓滿!

總結:

構建一個自定義標籤的流程便是如此,相信如果後面再遇到自定義標籤,按照此構建思路反向解析一下便也能順藤摸瓜知曉它的來龍去脈。其實看一下之前我們用過的中間件,像dubbo,也是一樣的套路,只是功能更繁雜。

dubbo的jar包如圖所示:

也是用了這三個實現的標籤引用。

寫在最後:至此,19年金三銀四找工作之途的總結(包括技術跟個人感悟,感興趣的道友可以移步我的另幾篇博文一探究竟)便告一段落。今年自從去年下半年的資本收縮後,行情確實相較以往差了一些(雖然貧道也才17年入行),但我個人的感覺

是行業整體迴歸理性,之前是經過三四個月培訓班下來就月薪十幾K而且都搶着招人,太不正常。話說回來,不管外界行情怎樣,只要你喜歡做這一行,都要靜下心來多學習多探究,才能在不斷的積累中讓自己更上一層。今年年初兩次阿里的面試

經歷也讓自己對於自身能力有了更客觀真實的認識,不管是從項目經歷還是個人技術積累上,都差很多。目前貧道新公司所處的部門,對技術比較注重,且技術大佬不少,工作都很認真,正是"發糞塗牆"之際,內心充滿激情。後面的博文目前打算

更多偏向微服務(因爲目前公司的項目用的就是微服務架構)、併發編程(因爲前段時間買了本併發編程實戰)。技術積累不是一朝一夕,與各位道友共勉!
原文地址https://www.cnblogs.com/zzq6032010/p/10657907.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章