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