自己构建一个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/user跟http://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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java大神进阶之路!每一位程序员值得借鉴!
既然励志在java路上走的更远,那就必须了解java的路径。先看图 image.png更加细化的细节如下 一: 编程基础不管是C还是C++,不管是Java还是PHP,想成为一名合格的程序员,基本的数据结构和算法基础还是要有的。下面几篇文章从思想到实现,为你梳理出常用的数据结构和经典算法。 1-1 常用数据结构 数组、链表、堆、栈、队列、Hash表、二叉树等 1-2 算法思想 算法时间复杂度和空间复杂度的分析计算 算法思想:递推、递归、穷举、贪心、分治、动态规划、迭代、分枝界限 1-3 经典算法 经典排序:插入排序、冒泡排序、快排(分划交换排序)、直接选择排序、堆排序、合并排序 经典查找:顺序查找、二分查找、二叉排序树查找 1-4 高级数据结构 B+/B-数、红黑树、图等 1-5 高级算法 图的深度优先搜索、图的广度优先搜索、拓扑排序、Dijkstra算法(单源最短路径)、霍夫曼编码、辗转相除法、最小生成树等 二:Java语言基础诞生不过二十余年的Java语言凭借其跨平台、面向对象、适合于分布式计算的特性,广泛应用于Web网站、移动设备、桌面应用中,并且已经连续多年稳居TOBIE编程语言...
- 下一篇
我用python10年后,我发现学python必看这三本书!
非常喜欢python 我非常喜欢python,在前面5年里,它一直是我热衷使用并不断研究的语言,迄今为止,python都非常友好并且易于学习! 它几乎可以做任何事,从简单的脚本创建、web,到数据可视化以及AI人工智能,使热衷python的人群变得越来越多。 接下来推荐3本学python一定要看的书籍,有了他们,至少能节省50%的时间少走一半的弯路! 零基础学python必看 《父与子编程:与小卡特一起学python》 这本书是零基础看的书籍,对于很多刚接触编程的小白来说,对于很多名词是很难理解的,本书把知识点拆的很细,更难得的是那些难理解的技术名词,这本书都是用场景对话、动画的形式展现,让初学者更容易学会;看了它,你就会发现python是多么容易! python技能加强必看 《python cookbook》 本书介绍了应用在各个领域的技巧和方法,涵盖了很多高级主题:元编程、网络、web编程、实用脚本、系统管理、C语言拓展等。 本书还覆盖了许多python日常开发中的问题以及解决方案,在实际开发中的编程技巧,告诉你python如何工作并且为什么工作! python项目经验 《pyth...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合Redis,开启缓存,提高访问速度