custom-product.xsd我在上面的描述文件中,定义了一个新的 targetNamespace,同时定义了一个 叫 product 的新元素,并且将组件中的属性都列在 中。XSD 文件是 XML DTD 的替换者,具体就不多深入,感爱好的同学可以继续深入了解。
base.label.custom.ProductBeanDefinitionParserpublic class ProductBeanDefinitionParser extends AbstractSingleBeanDefinitionParser { @Override protected Class getBeanClass(Element element) { // 返回对应的类型 return Product.class; } // 从 element 中解析并提取对应的元素 @Override protected void doParse(Element element, BeanDefinitionBuilder builder) { String productId = element.getAttribute("productId"); String productName = element.getAttribute("name"); String productUnit = element.getAttribute("unit"); // 将提取到的数据放入 BeanDefinitionBuilder 中,比及完成全部 bean 的解析之后统一注册到 beanFactory 中 if (productId != null) { // element.getAttribute("") 方法取出来的都是 string 类型,利用时记得手动转换 builder.addPropertyValue("productId", Integer.valueOf(productId)); } if (StringUtils.hasText(productName)) { builder.addPropertyValue("name", productName); } if (StringUtils.hasText(productUnit)) { builder.addPropertyValue("unit", productUnit); } }}关键点在于,我们的解析器是继续于 AbstractSingleBeanDefinitionParser,重载了两个方法,详细用途请看解释~
base.label.custom.ProductBeanHandler
spring.handlers
1http\://vip-augus.github.io/schema/product=base.label.custom.ProductBeanHandler
spring.schemas到了这一步,自定义的配置就结束了。下面是如何利用
1http\://vip-augus.github.io/schema/product.xsd=custom/custom-product.xsd
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate#parseCustomElement(org.w3c.dom.Element, org.springframework.beans.factory.config.BeanDefinition)
org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver#resolve
org.springframework.beans.factory.xml.NamespaceHandlerSupport#parse
org.springframework.beans.factory.xml.AbstractBeanDefinitionParser#parse
org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser#parseInternal
欢迎光临 创意电子 (https://wxcydz.cc/) | Powered by Discuz! X3.4 |