首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

spring源码解读(三)——编写自定义标签

在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()); }}

运行结果如下:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200719A0KEN500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券