2018-07-09 13:21:33 1228瀏覽
隨著SpringBoot的日漸流行,應(yīng)用里的大部分配置都被隱藏了起來,Spring2.5在2.0的基于Schema的Bean配置的基礎(chǔ)之上,再增加了擴(kuò)展XML配置的機(jī)制。通過該機(jī)制,我們可以編寫自己的Schema,并根據(jù)自定義的Schema用自定的標(biāo)簽配置Bean,下面這篇文章主要介紹了關(guān)于Java培訓(xùn)中Spring自定義Schema如何解析生效的詳細(xì)介紹。
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://m.dionly.net.cn/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); } }
以上就是關(guān)于扣丁學(xué)堂Java開發(fā)Spring自定義Schema如何解析生效的詳細(xì)介紹,希望對大家學(xué)習(xí)有所幫助,想要了解更多內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢??鄱W(xué)堂不僅有專業(yè)的老師和與時俱進(jìn)的課程體系,還有大量的Java視頻教程供學(xué)員觀看學(xué)習(xí),想要快速學(xué)習(xí)Java開發(fā)技術(shù)的小伙伴快快行動吧??鄱W(xué)堂H5技術(shù)交流群:559883758。
【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】
查看更多關(guān)于“Java開發(fā)資訊”的相關(guān)文章>>