前景:经常使用一些依赖于Spring的组件时,发现可以通过自定义配置Spring的标签来实现插件的注入,例如数据库源的配置,Mybatis的配置等。那么这些Spring标签是如何自定义配置的?学习Spring标签的自定义配置为以后实现分布式服务框架做技术储备。

技术分析:Spring的标签配置是通过XML来实现的,通过XSD(xml Schema Definition)来定义元素,属性,数据类型等。

Spring自定义标签解析

1.Spring启动时通过扫描根目录下的META-INF文件下的spring.handlers和spring.schemas文件找到处理类所在的位置以及schemas的路径。

   spring.handlers        

http\://jewel.com/schema/jewel=com.jewel.spring.tag.handler.JewelNamespaceHandler

  spring.schemas

http\://jewel.com/schema/jewel.xsd=META-INF/jewel.xsd

 2.实现命名空间的处理提供类(NamespaceHandlerSupport):这个类和spring.handlers中的路径对应

public class JewelNamespaceHandler extends NamespaceHandlerSupport {

    public void init() {
registerBeanDefinitionParser("application", new AppBeanDefinitionParser(AppBeanCnf.class));
} }

3.实现解析类(AppBeanDefinitionParser)负责对标签的解析

public class AppBeanDefinitionParser implements BeanDefinitionParser {

	private Class<?> clssze;

	public AppBeanDefinitionParser(Class<?> cls) {
this.clssze = cls;
} public BeanDefinition parse(Element element, ParserContext parserContext) {
//其中Element类负责获取标签信息
          //ParserContext是Spring上下文可以将bean注册到Spring中在这里负责注入工作
}
}

 4.XSD文件配置

jewel.xsd文件:改文件和spring.schemas中对应位置

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
xmlns="http://jewel.com/schema/jewel"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:beans="http://www.springframework.org/schema/beans"
targetNamespace="http://jewel.com/schema/jewel"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xsd:import namespace="http://www.springframework.org/schema/beans" /> <xsd:element name="application">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="beans:identifiedType">
<xsd:attribute name="name" type="xsd:string" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element> </xsd:schema>

5.在标签配置(beans.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:tool="http://www.springframework.org/schema/tool" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jewel="http://jewel.com/schema/jewel"-------------命名空间的指定
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://jewel.com/schema/jewel http://jewel.com/schema/jewel.xsd"----------路径指定>
<!-- 注解支持 -->
<jewel:application name="demo-app"></jewel:application>-------------------标签配置
</beans>

  

总结:通过以上步骤我们就可以自定义application标签并且可以通过Sping解析。

         

Spring 自定义标签配置的更多相关文章

  1. spring基础---->spring自定义标签(一)

    Spring具有一个基于架构的扩展机制,可以使用xml文件定义和配置bean.本博客将介绍如何编写自定义XML bean的解析器,并用实例来加以说明.其实我一直相信 等你出现的时候我就知道是你. Sp ...

  2. spring自定义标签之 自我实现

     引言: 最近心情比较难以平静,周末的两天就跑出去散心了,西湖边上走走,看日落,还是不错的.回来博客上发现,在自定义标签上,最后一步实现忘记加上了.其实,人生的路程中,我们总是实现着自我的价值,让自己 ...

  3. spring自定义标签之 规范定义XSD

    引言: spring的配置文件中,一切的标签都是spring定义好的.<bean/>等等,有了定义的规范,才能让用户填写的正常可用.想写自定义标签,但首先需要了解XML Schema De ...

  4. JSP自定义标签配置

    JSP自定义标签配置 JSP自定义标签 <taglib>         <taglib-uri>/WEB-INF/you.tld</taglib-uri>     ...

  5. Spring自定义标签

    一.原理: 1.Spring通过XML解析程序将其解析为DOM树, 2.通过NamespaceHandler指定对应的Namespace的BeanDefinitionParser将其转换成BeanDe ...

  6. spring 自定义标签的实现

    在我们进行Spring 框架开发中,估计用到最多的就是bean 标签吧,其实在Spring中像<mvc/><context/>这类标签以及在dubbo配置的标签都是属于自定义的 ...

  7. Spring自定义标签解析与实现

           在Spring Bean注册解析(一)和Spring Bean注册解析(二)中我们讲到,Spring在解析xml文件中的标签的时候会区分当前的标签是四种基本标签(import.alias ...

  8. dubbo源码学习(二) : spring 自定义标签

    做dubbo的配置时很容易发现,dubbo有一套自己的标签,提供给开发者配置,其实每一个标签对应着一个 实体,在容器启动的时候,dubbo会对所有的配置进行解析然后将解析后的内容设置到实体里,最终du ...

  9. 这一次搞懂Spring自定义标签以及注解解析原理

    前言 在上一篇文章中分析了Spring是如何解析默认标签的,并封装为BeanDefinition注册到缓存中,这一篇就来看看对于像context这种自定义标签是如何解析的.同时我们常用的注解如:@Se ...

随机推荐

  1. php 代替 js实现自定义时间选择器

    w 0-php来结合服务端数据,处理前端页面的交互: 1-php 加法 乘法的效率对比,对算术运算的优化. 减少乘法运算? function w_select($wname, $wii) { $w = ...

  2. Internet Explorer 1.0到9.0截图画廊

    Internet Explorer 1.0 Windows 95 原先并没有IE,IE1.0是通过一个名叫Windows 95 Plus!Pack的扩展包来到用户的电脑中的,它的到来改变了Netsca ...

  3. vue-router 中 meta的用法

    vue-router中的meta,也就是类似于面包屑的功能 路由 代码 用这个获取 嗯,就酱~~ 参考链接:https://blog.csdn.net/qq_32963841/article/deta ...

  4. SQL竖表转换成横表统计

    #创建表user_score create table user_score ( name varchar(20), subjects varchar(20), score int ); insert ...

  5. Java Synchronized 与 ThreadLocal 异同

    同:都是为了线程安全 异:synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问.而ThreadLocal为每一个线程都提供了变量的副本, 使得每个线程在某一时间访问到的并 ...

  6. python DES3 加密解密

    背景:想给公司的进件流程写一套进件脚本,首先遇到的就是加密解密.公司用的 DES3 + base64 加密解密 一.安装  pycrypto模块,推荐用pycrypto编译文件,直接下载安装就行 ht ...

  7. mysql-xtrabackup

    使用xtrabackup进行MySQL数据库备份 2013年10月04日 ⁄ MySQL ⁄ 共 11306字 ⁄ 使用xtrabackup进行MySQL数据库备份已关闭评论 ⁄ 被围观 34,116 ...

  8. Runtime.getRuntime().exec()需要注意的地方

    文章出处http://www.cnblogs.com/fclbky/p/6112180.html 有时候我们可能需要调用系统外部的某个程序,此时就可以用Runtime.getRuntime().exe ...

  9. How to make TWebBrowser get focus in Delphi

    How to make TWebBrowser get focus in Delphi   Written by Administrator       Tags: Delphi Twebbrowse ...

  10. c# Datagridview 设置单位格为编辑状态(in editing mode)

    private void dataGridView1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Tab && ...