Spring中自定义标签的使用(Idea)

1、项目地址
在这里插入图片描述
2、建立一个实体类User

public class User {
    private String userName;
    private String 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;
    }

}

3、创建一个文件,实现AbstractSingleBeanDefinitionParser接口,用来解析xsd文件中的定义和组件定义

public class UserBeanDefinitionParse extends AbstractSingleBeanDefinitionParser {
    //Element对应的类
    protected Class getBeanClass(Element element){
        return User.class;
    }
    //从element中解析并提取出对应的元素
    protected void doParse(Element element, BeanDefinitionBuilder bean) {
        String userName = element.getAttribute("userName");
        String email = element.getAttribute("email");
        //将解析数据放入到BeanDefinitionBuilder中,待到完成所有的bean的解析后统一注册到beanFactory中
        if(StringUtils.hasText(userName)){
            bean.addPropertyValue("userName",userName);
        }
        if(StringUtils.hasText(email)){
            bean.addPropertyValue("email",email);
        }
    }

}

4、创建一个Handler文件,扩展自NamespaceHandlerSupport,目的是将组件注册到Spring容器中

/**
 * Created by Administrator on 2018/11/21.
 * 目的是将组件注册到spring容器中
 */
public class MyNamespaceHandler extends NamespaceHandlerSupport {
    @Override
    public void init() {
        registerBeanDefinitionParser("user",new UserBeanDefinitionParse());
    }
}

5、在resources下创建一个user.xsd文件

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.lexueba.com/schema/user"
        xmlns:tns="http://www.lexueba.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>

6、在resources下创建一个META-INF文件(默认是没有的,只有在打成jar后,会默认自动生成),创建spring.handlers和spring.schemas文件
目录结构如下:
在这里插入图片描述

spring.handlers文件:http\://www.lexueba.com/schema/user=MyNamespaceHandler
spring.schemas文件:http\://www.lexueba.com/schema/user.xsd=user.xsd

7、在resources下创建test.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:myname="http://www.lexueba.com/schema/user"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.lexueba.com/schema/user http://www.lexueba.com/schema/user.xsd">

    <myname:user id="testBean" userName="hahha" email="bbb"/>
</beans>

8、创建一个测试类

public class Test {
    public static void main(String[] args) {
        //BeanFactory bf =new XmlBeanFactory(new ClassPathResource("spring.xml"));
        ApplicationContext ac = new ClassPathXmlApplicationContext("test.xml");
        User user = (User) ac.getBean("testBean");
       // System.out.println(user.getUserName());
        System.out.println(user.getEmail()+"--"+user.getUserName());

    }
}
运行结果如下:
bb--hahha
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值