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

在spring中,我们经常使用spring中给我提供的便签来完成很多功能,有的时候当spring提供的标签无法满足我们的开发时,这是,我们就可以使用自定义标签来扩展我们的程序,下面我们就来看看如何使用自定义标签功能。

1.首先定义一个实体,用来接收自定义的配置标签

public class User {

    private String userName;

    private String email;

    // 省略get/set方法
}

2.定义一个xsd文件描述组件内容

名称叫user.xsd




    
        
            
            
        
    

3.创建一个实体,继承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);
        }
    }
}

4.创建一个实例,继承NamespaceHandlerSupport,用来将组件注册到Spring容器中

public class MyNamespaceHandler extends NamespaceHandlerSupport {

    @Override
    public void init() {
        registerBeanDefinitionParser("user", new UserBeanDefinitionParser());
    }
}

5.编写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

6.在我们的spring配置文件中,可以引入我们自定义的标签,如下:




    

7.编写测试类

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

输入结果如下:

spring源码解读(三) —— 编写自定义标签_第1张图片

你可能感兴趣的:(spring)