カスタムxsd拡張

3021 ワード

もっと読む
拡張xsdは簡単です.公式文書をお送りします.https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/xml-custom.html
このとおりにしても大丈夫です.自分で記録してください.
第一歩:beanの構造を定義し、xsdをカスタマイズするということは、xmlを通してbeanを生成するだけです.このbeanは事前に説明したものです.どのように生成するべきですか?
 



    

    
        
            
                
                    
                    
                
            
        
    
 第二のステップは、このxmlのbeanhandlerを解析して、beanの構造を定義した以上、どの種類がbeanをどのように生成するのかを知る必要があります.これはhanderが必要です.springは分析xmlの工具類を提供しています.だから、springだけに教えてください.このxmlをbeanにするにはどうすればいいですか?
 
 
public class MyNamespaceHandler extends NamespaceHandlerSupport {
    @Override
    public void init() {
        registerBeanDefinitionParser("gycdate", new SimpleMyBeanDefinitionParser());
    }
}


public class SimpleMyBeanDefinitionParser  extends AbstractSingleBeanDefinitionParser {


    @Override
    protected Class getBeanClass(Element element) {
        return Mybean.class;
    }

    @Override
    protected void doParse(Element element, BeanDefinitionBuilder bean) {
        // this will never be null since the schema explicitly requires that a value be supplied
        String pattern = element.getAttribute("pattern");
        bean.addConstructorArgValue(pattern);
        SimpleDateFormat dateFormat=new SimpleDateFormat();
        // this however is an optional property
        String lenient = element.getAttribute("isgyc");
        if (StringUtils.hasText(lenient)) {
            bean.addPropertyValue("isgyc", Boolean.valueOf(lenient));
        }
    }
}
 第三ステップは、xml命令空間とxsdファイル、handerの三つを関連付けると、どのようにresourceの下のspring.handersとspring.schemasがいいですか?
spring.handers
http\://www.mycompany.com/schema/mynsgyc=com.xxx.xxx.MyNamespaceHandler

spring.schemas
http\://www.mycompany.com/schema/mynsgyc/spring-mynsgyc.xsd=com/xxx/xxx/TestXsd.xml
最後にこのbeanは注釈で取得できます.
  @Autowired
    private Mybean mybean;
 
そしてdoneです