2018-07-09 13:21:33 414浏览
随着SpringBoot的日渐流行,应用里的大部分配置都被隐藏了起来,Spring2.5在2.0的基于Schema的Bean配置的基础之上,再增加了扩展XML配置的机制。通过该机制,我们可以编写自己的Schema,并根据自定义的Schema用自定的标签配置Bean,下面这篇文章主要介绍了关于Java培训中Spring自定义Schema如何解析生效的详细介绍。
Springdataes dubbo
publicclassElasticsearchNamespaceHandlerextendsNamespaceHandlerSupport{
publicElasticsearchNamespaceHandler(){
}
publicvoidinit(){
RepositoryConfigurationExtensionextension=newElasticsearchRepositoryConfigExtension();
RepositoryBeanDefinitionParserparser=newRepositoryBeanDefinitionParser(extension);
this.registerBeanDefinitionParser("repositories",parser);
this.registerBeanDefinitionParser("node-client",newNodeClientBeanDefinitionParser());
this.registerBeanDefinitionParser("transport-client",newTransportClientBeanDefinitionParser());
}
}
<elasticsearch:transport-clientid="client" cluster-nodes="192.168.73.186:9300"cluster
privatefinalMap<String,BeanDefinitionParser>parsers=newHashMap();
protectedvoidparseBeanDefinitions(Elementroot,BeanDefinitionParserDelegatedelegate){
if(delegate.isDefaultNamespace(root)){
NodeListnl=root.getChildNodes();
for(inti=0;i<nl.getLength();++i){
Nodenode=nl.item(i);
if(nodeinstanceofElement){
Elementele=(Element)node;
if(delegate.isDefaultNamespace(ele)){
this.parseDefaultElement(ele,delegate);
}else{
delegate.parseCustomElement(ele);
}
}
}
}else{
delegate.parseCustomElement(root);
}
}
publicbooleanisDefaultNamespace(StringnamespaceUri){
return!StringUtils.hasLength(namespaceUri)||"http://www.codingke.com/schema/beans".equals(namespaceUri);
}
publicBeanDefinitionparseCustomElement(Elementele,BeanDefinitioncontainingBd){
StringnamespaceUri=this.getNamespaceURI(ele);
NamespaceHandlerhandler=this.readerContext.getNamespaceHandlerResolver().resolve(namespaceUri);
if(handler==null){
this.error("UnabletolocateSpringNamespaceHandlerforXMLschemanamespace["+namespaceUri+"]",ele);
returnnull;
}else{
returnhandler.parse(ele,newParserContext(this.readerContext,this,containingBd));
}
}
publicBeanDefinitionparse(Elementelement,ParserContextparserContext){
returnthis.findParserForElement(element,parserContext).parse(element,parserContext);
}
privateBeanDefinitionParserfindParserForElement(Elementelement,ParserContextparserContext){
StringlocalName=parserContext.getDelegate().getLocalName(element);
BeanDefinitionParserparser=(BeanDefinitionParser)this.parsers.get(localName);
if(parser==null){
parserContext.getReaderContext().fatal("CannotlocateBeanDefinitionParserforelement["+localName+"]",element);
}
returnparser;
}
publicclassTransportClientBeanDefinitionParserextendsAbstractBeanDefinitionParser{
publicTransportClientBeanDefinitionParser(){
}
protectedAbstractBeanDefinitionparseInternal(Elementelement,ParserContextparserContext){
BeanDefinitionBuilderbuilder=BeanDefinitionBuilder.rootBeanDefinition(TransportClientFactoryBean.class);
this.setConfigurations(element,builder);
returnthis.getSourcedBeanDefinition(builder,element,parserContext);
}
}
以上就是关于扣丁学堂Java开发Spring自定义Schema如何解析生效的详细介绍,希望对大家学习有所帮助,想要了解更多内容的小伙伴可以登录扣丁学堂官网咨询。扣丁学堂不仅有专业的老师和与时俱进的课程体系,还有大量的Java视频教程供学员观看学习,想要快速学习Java开发技术的小伙伴快快行动吧。扣丁学堂H5技术交流群:559883758。
【关注微信公众号获取更多学习资料】