1.自定义标签实现及使用
参考: http://blog.csdn.net/fighterandknight/article/details/50112701
1)创建一个需要扩展的组件 User.java
2)定义一个XSD文件,描述组件内容 user.xsd
3)创建一个java类 MyParser.java ,实现BeanDefinitionParser接口,用来解析XSD文件中的定义和组件定义
4)创建一个Handler类 MyNamespaceHandler.java ,扩展子NameSpaceHandlerSupport,目的是将组件注册到容器。
5)编写(添加)Spring.handlers和Spring.schemas文件。
类图如下:
jvm敏捷开发语言groovy 主要依赖接口 NamespaceHandlerResolver,NamespaceHandler 实现自定义标签的解析与处理。
NamespaceHandlerResolver 存在实现,可以不必管, NamespaceHandler 存在抽象实现 NamespaceHandlerSupport ,其中又依赖接口 BeanDefinitionParser,我们主要是对抽象实现AbstractSimpleBeanDefinitionParser中的doParse(),getBeanClass()进行处理。
1)创建一个需要扩展的组件 User.java
package com.base.yun.spring.beans; public class User { private String name; private String sex; private String email; private String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getId() { return id; } public void setId(String id) { this.id = id; } }
2)定义一个XSD文件,描述组件内容 user.xsd
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.yun.com/schema/user" xmlns:tns="http://www.yun.com/schema/user" elementFormDefault="qualified"> <element name="user"> <complexType> <attribute name="id" type="string" /> <attribute name="name" type="string" /> <attribute name="sex" type="string" /> <attribute name="email" type="string" /> </complexType> </element> </schema>
3)创建一个java类 MyParser.java ,实现BeanDefinitionParser接口,用来解析XSD文件中的定义和组件定义
package com.base.yun.spring.parser; import org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser; import org.w3c.dom.Element; import com.base.yun.spring.beans.User; public class MyParser extends AbstractSimpleBeanDefinitionParser{ @Override protected Class<?> getBeanClass(Element element) { return User.class; } }
4)创建一个Handler类 MyNamespaceHandler.java ,扩展子NameSpaceHandlerSupport,目的是将组件注册到容器。
package com.base.yun.spring.namespacehandler; import org.springframework.beans.factory.xml.NamespaceHandlerSupport; import com.base.yun.spring.parser.MyParser; public class MyNamespaceHandler extends NamespaceHandlerSupport{ public void init() { registerBeanDefinitionParser("user", new MyParser()); } }
5)编写(添加)Spring.handlers和Spring.schemas文件。
http://www.yun.com/schema/user=com.base.yun.spring.namespacehandler.MyNamespaceHandler
http://www.yun.com/schema/user.xsd=org/springframework/beans/factory/xml/user.xsd
代码目录如下: