此篇博客分为三部分:1 schema配置 2 自定义标签和handler的加载过程 3 spring启动容器到handlers加载过程中间每一步怎么走的
1 schema配置
2 Spring自定义标签:
Spring自定义标签的原理
XML通常通过DTD、XSD定义,但DTD的表达能力较弱,XSD定义则能力比较强,能够定义类型,出现次数等。自定义标签需要XSD支持,在实现时使用Namespace扩展来支持自定义标签。
当你在苦逼的写下面的代码时:
- <bean id="beanId" class="com.xxx.xxxx.Xxxxx">
- <property name="property1">
- <value>XXXX</value>
- </property>
- <property name="property2">
- <value>XXXX</value>
- </property>
- </bean>
是不是会羡慕这样写代码呢?
- <xxx:xxxx id="beanId"/>
Spring通过XML解析程序将其解析为DOM树,通过NamespaceHandler指定对应的Namespace的BeanDefinitionParser将其转换成BeanDefinition。再通过Spring自身的功能对BeanDefinition实例化对象。
在期间,Spring还会加载两项资料:
- META-INF/spring.handlers
指定NamespaceHandler(实现org.springframework.beans.factory.xml.NamespaceHandler)接口,或使用org.springframework.beans.factory.xml.NamespaceHandlerSupport的子类。 - META-INF/spring.schemas
在解析XML文件时将XSD重定向到本地文件,避免在解析XML文件时需要上网下载XSD文件。通过现实