2018-07-09 13:21:33 398浏览
随着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。
【关注微信公众号获取更多学习资料】