Spring的自定义标签
来源:互联网 发布:java导出excel详解 编辑:程序博客网 时间:2024/06/11 08:34
- 创建一个需要扩展的组件
在com.test.beans下创建User类
package com.test.beans;public class User { private String username; private String email; public User() { } public User(String username, String email) { this.username = username; this.email = email; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", email='" + email + '\'' + '}'; }}
- 定义一个XSD文件描述组件内容
在resources下创建META-INF文件夹,在META-INF下创建user.xsd文件,文件内容为:
<?xml version="1.0" encoding="UTF-8" ?><schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.test.tag.com/schema/user" elementFormDefault="qualified"> <element name="user"> <complexType> <attribute name="id" type="string"/> <attribute name="username" type="string"/> <attribute name="email" type="string"/> </complexType> </element></schema>
- 创建一个文件,实现BeanDefinitionParser接口,用来解析XSD文件中的定义和组件定义
在com.test.tag包下创建UserBeanDefinitionParser类,继承自AbstractSingleBeanDefinitionParser类
package com.test.tag;import org.springframework.beans.factory.support.BeanDefinitionBuilder;import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;import org.springframework.util.StringUtils;import org.w3c.dom.Element;import com.test.beans.User;public class UserBeanDefinitionParser extends AbstractSingleBeanDefinitionParser { @Override protected Class<?> getBeanClass(Element element) { return User.class; } @Override protected void doParse(Element element, BeanDefinitionBuilder builder) { String username = element.getAttribute("username"); String email = element.getAttribute("email"); if (StringUtils.hasText(username)) { builder.addPropertyValue("username", username); } if (StringUtils.hasText(email)) { builder.addPropertyValue("email", email); } }}
- 创建一个Handler文件,扩展自NamespaceHandlerSupport,目的是将组件注册到Spring容器
在com.test.tag包下创建UserNamespaceHandler类,继承自NamespaceHandlerSupport类
package com.test.tag;import org.springframework.beans.factory.xml.NamespaceHandlerSupport;public class MyNamespaceHandler extends NamespaceHandlerSupport { @Override public void init() { registerBeanDefinitionParser("user", new UserBeanDefinitionParser()); }}
- 在META-INF下编写Spring.schemas和Spring.handlers文件
Spring.handlers文件:
http\://www.test.tag.com/schema/user=com.test.tag.UserNamespaceHandler
Spring.schemas文件:
http\://www.test.tag.com/schema/user.xsd=META-INF/user.xsd
- 标签的使用
1.在resources下的spring-context.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:bean="http://www.test.tag.com/schema/user" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.test.tag.com/schema/user http://www.test.tag.com/schema/user.xsd"> <bean:user id="test" username="张三" email="zhang3@163.com"/></beans>
2.测试
package com.test;import org.junit.Test;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.test.beans.User;public class TestTag { @Test public void testTag() { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring-context.xml"); User user = (User) ctx.getBean("test"); System.out.println(user.getUsername() + " : " + user.getEmail()); }}3.输出
张三 : zhang3@163.com
阅读全文
0 0
- Spring的自定义标签
- Spring自定义标签的原理
- Spring自定义标签的原理
- Spring自定义标签的解析
- spring扩展自定义标签的方法
- 自定义标签Spring注入的问题
- JSP自定义标签的spring注入
- (转载)Spring自定义标签的原理
- spring自定义缓存标签的实现
- Spring源码解析-自定义标签的解析
- spring自定义标签
- spring自定义标签实现
- spring 自定义标签 学习
- 自定义Spring配置标签
- spring自定义标签
- spring自定义标签
- spring自定义标签实现
- spring自定义标签
- FormPanel类的frame属性
- 用jdbc做查询操作时动态拼接参数报SQL语法错误的问题
- Weka上机实验二:调用WEKA包进行kmeans聚类
- svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法
- 求若干个数的平均数并输出123456的二进制和十六进制
- Spring的自定义标签
- Java并发编程:Lock
- okhttp的二次封装加入泛型
- 02css学习笔记
- Android view滑动悬浮固定效果实现
- KITTI数据集测试
- Java中实现SMTP邮件服务器-用demo简单粗暴的来发一波邮件了
- VS2013 加快编译速度 的方法整理
- 深度学习笔记 —— SVM 支持向量机