在Spring中自定义xml标签并解析

首先可以从源码看到,Spring在加载xml时,会加载META-INF文件夹下的Spring.schemas与Spring.handlers文件。


image.png

image.png

Spring.schemas文件是配置xsd/dtd的
Spring.handlers才是配置对应命名空间走哪个处理器,处理器需要继承NamespaceHandlerSupport类,spring在解析的时候会调用处理器的init方法,在init方法中,我们需要注册解析器,解析器需要继承AbstractSingleBeanDefinitionParser类,在doParse方法中进行解析逻辑。

解析实体

public class User {

    private String username;

    private String password;

        get\set....

解析类

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 password = element.getAttribute("password");

        if (StringUtils.hasText(username)) {
            builder.addPropertyValue("username", username);
        }
        if (StringUtils.hasText(password)) {
            builder.addPropertyValue("password", password);
        }
    }
}

处理器

public class UserNamespaceHandler extends NamespaceHandlerSupport {

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

Spring.handlers

http\://www.jj.com/schema/jj=com.xiangjunjie.customize.tag.UserNamespaceHandler

Spring.schemas

http\://www.jj.com/schema/jj.xsd=META-INF/jj.xsd

jj.xsd




    
        
            
            
            
        
    


application.xml




    

image.png

你可能感兴趣的:(在Spring中自定义xml标签并解析)