在spring中,我们经常使用spring中给我提供的标签来完成很多功能,有的时候当spring提供的标签无法满足我们的开发时,这时,我们就可以使用自定义标签来扩展我们的程序,下面我们就来看看如何使用自定义标签功能。
一、首先定义一个实体,用来接收自定义的配置标签
public class User {
private String userName;
private String email;// 省略get/set方法 }
二、定义一个xsd文件描述组件内容,名称叫user.xsd
targetNamespace="http://www.example.org/schema/user" xmlns:tns="http://www.example.org/schema/user" elementFormDefault="qualified">
三、创建一个实体,继承AbstractSingleBeanDefinitionParser类,用来协议xsd文件中定义的组件
public class UserBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
protected Class getBeanClass(Element element) { return User.class; }
@Override protected void doParse(Element element, BeanDefinitionBuilder bean) { String userName = element.getAttribute("userName"); String email = element.getAttribute("email"); if (StringUtils.hasText(userName)) { bean.addPropertyValue("userName", userName); } if (StringUtils.hasText(email)) { bean.addPropertyValue("email", email); } }}
四、创建一个实例,继承NamespaceHandlerSupport,用来将组件注册到Spring容器中
public class MyNamespaceHandler extends NamespaceHandlerSupport {
@Override public void init() { registerBeanDefinitionParser("user", new UserBeanDefinitionParser()); }}
五、编写Spring.handlers和spring.schemas文件。文件位置放在/META-INF/文件下。
spring.handlers文件内容如下,实例类MyNamespaceHandler的路径名称:
http\://www.example.org/schema/user=com.study.label.MyNamespaceHandler
spring.schemas文件内容如下,用来表示我们自定义的标签的xsd路径:
http\://www.example.org/schema/user.xsd=META-INF/user.xsd
六、在我们的spring配置文件中,可以引入我们自定义的标签,如下:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:myname="http://www.example.org/schema/user" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.example.org/schema/user http://www.example.org/schema/user.xsd">
七、编写测试类
public class labelTest {
public static void main(String[] args) { ApplicationContext bf = new ClassPathXmlApplicationContext("mylabel.xml"); User user = (User)bf.getBean("testbean"); System.out.println(user.getUserName() + "," + user.getEmail()); }}
运行结果如下:
领取专属 10元无门槛券
私享最新 技术干货