spring自定义标签

第一步:编写xsd文件

首先要定义xml的约束文件,本文使用xsd约束而不是dtd,
spring自定义标签_第1张图片
META-INF


    
        
            
            
        
    
    
        
            
            
            
            
        
    
    
        
            
            
            
        
    
    
        
            
            
            
        
    

特别注意:
spring自定义标签_第2张图片
自定义的xsd文件头
第二步:编写spring.schemas文件

红框中的内容是自定义的内容。但是这两个值是一一对应的,spring读取xml文件内容的时候会校验这个xsd文件,默认去META-INF路径去找spring.schemas文件,spring.schemas文件中内容如下,

http\://code.ruochentech.com/schema/dubbo/soa.xsd=META-INF/soa.xsd
第三步:配置spring.handlers文件
http\://code.ruochentech.com/schema/dubbo=com.yonyou.soa.parser.SOANamespaceHandler
第四步:编写自定义标签解析类的初始化类
public class SOANamespaceHandler extends NamespaceHandlerSupport {
    public void init() {
        registerBeanDefinitionParser("registry",new RegistryBeanDefinitionParser(Registry.class));
        registerBeanDefinitionParser("reference",new ReferenceBeanDefinitionParser(Reference.class));
        registerBeanDefinitionParser("protocol",new ProtocolBeanDefinitionParser(Protocol.class));
        registerBeanDefinitionParser("service",new ServiceBeanDefinitionParser(Registry.class));
    }
}
第五步:自定义标签解析类(以xsd文件中registry标签解析为例)
public class RegistryBeanDefinitionParser implements BeanDefinitionParser {
    private Class beanClass;
    public RegistryBeanDefinitionParser(Class beanClass){
        this.beanClass=beanClass;
    }
    public BeanDefinition parse(Element element, ParserContext parserContext) {
        RootBeanDefinition rootBeanDefinition=new RootBeanDefinition();
        rootBeanDefinition.setBeanClass(beanClass);
        rootBeanDefinition.setLazyInit(false);
        String protocol = element.getAttribute("protocol");
        String address = element.getAttribute("address");
        rootBeanDefinition.getPropertyValues().addPropertyValue("protocol",protocol);
        rootBeanDefinition.getPropertyValues().addPropertyValue("address",address);
        return rootBeanDefinition;
    }
}
第六步:测试
6.1配置xml文件


    
    
    
    

特别注意:
测试xml文件注意点

demo地址:https://github.com/ruochen0328/soa.git

你可能感兴趣的:(spring自定义标签)