定义一个对象,用来存储标签的信息
@Datapublic class Label {private String id;private String name;private double height;private String sex;}
2.定义一个标签解析器继承标签解析器的拓展接口
public class MyLabelBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {@Overrideprotected Class<?> getBeanClass(Element element) {return Label.class;}@Overrideprotected void doParse(Element element, BeanDefinitionBuilder builder) {将标签中所有的属性返回;String name = element.getAttribute("name");String id = element.getAttribute("id");Double height = Double.valueOf(element.getAttribute("height"));String sex = element.getAttribute("sex");if (StringUtils.hasText(name)){builder.addPropertyValue("name",name);}builder.addPropertyValue("id",id);builder.addPropertyValue("height",height);if (StringUtils.hasText(sex)){builder.addPropertyValue("sex",sex);}}}
3. 定义一个命名空间处理器继承命名空间拓展类
public class LabelNameSpaceHandler extends NamespaceHandlerSupport {@Overridepublic void init() {registerBeanDefinitionParser("label",new MyLabelBeanDefiniitionParser());}}
4.定义标签的文件label.xsd放在META-INF目录下
<schema xmlns="/2001/XMLSchema"targetNamespace="/schema/user" ----这个是命名空间的名称 可以是aaa之类的名字elementFormDefault="qualified"><element name="user"> ---标签的名称<complexType><attribute name="id" type="string"/><attribute name="username" type="string"/><attribute name="address" type="string"/><attribute name="age" type="int"/></complexType></element></schema>
5.在META-INF目录下,定义两个文件分别是:spring.handlers和spring.
--在spring.handlershttp\:///schema/label=com.carlos.custom.LabelNameSpaceHandler--在spring.schemashttp\:///schema/label.xsd=META-INF/label.xsd上面的两个都是为了建立映射关系 第一个的key是我们在定义label.xsd的targetNamespace;value就是命名空间处理类的路径;第二个的key是映射我们label.xml里面的内容,value就是实际要去寻找的文件位置;
6.label.xml放在resource目录下
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:mylabel="/schema/label" ----mylable这个可以自定义,"="号后面对应的value就是我们的命名空间;xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/label ----这里是我们的命名空间,跟上面value保持一致;/schema/label.xsd"> ----这个跟spring.schema来的key保持一致即可;<mylabel:label id="mylabel" name="zhangsan" height="18.8" sex="male"/> ---mylabel跟上面自定义名称保持一致;label就是标签对象的名称;id就是bean的名称,其他的逗哦是给属性赋值</beans>