spring源码阅读(二) Bean加载之自定义标签加载
2020-12-13 04:47
标签:getname names 没有 隔离 protected 实现 ble 加载 item 紧接着上一篇关于spring默认标签加载,这一篇来看下自定义标签的加载 继续从 DefaultBeanDefinitionDocumentReader来看 写在前边的东西,最近结合着《架构整洁之道》和《spring源码深度解析》这两本书一块儿看着,架构整洁之道里描述的一些面向对象的开发原则,接口隔离/单一职责/开闭幕式/依赖反转/里式替换 这些原则,在spring的源码里可谓是用的淋漓尽致,尤其单一职责/接口隔离,这两个翻看源码的时候尤其有体会,之前自己在项目开发中,其实根本没有在一这些事情,只是按照业务划分进行接口的拆分,并不在意是否是单一职责/是否接口隔离这些事情,其实单一职责能让我们更好的去拓展和维护我们的代码。包括接口隔离其实都是这样的目的。能够符合这些规则,我们的代码就能更大限度的符合高可维护性/低耦合性这些要求,也就能实现最大限度的优化开发效率这件事情。 好了,扯了些题外话,我们继续自定义标签的解析工作: 看到这里有点儿蒙圈,如果没有用过自定义标签的话,会有些蒙,那我们不妨在第一篇的例子上我们搞一个自定义标签来试试。 spring源码阅读(二) Bean加载之自定义标签加载 标签:getname names 没有 隔离 protected 实现 ble 加载 item 原文地址:https://www.cnblogs.com/aquariusm/p/11122227.htmlprotected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) {
if (delegate.isDefaultNamespace(root)) {
NodeList nl = root.getChildNodes();
for(int i = 0; i i) {
Node node = nl.item(i);
if (node instanceof Element) {
Element ele = (Element)node;
if (delegate.isDefaultNamespace(ele)) {
this.parseDefaultElement(ele, delegate); // 默认标签解析
} else {
delegate.parseCustomElement(ele); // 自定义标签解析
}
}
}
} else {
delegate.parseCustomElement(root); // 自定义标签解析
}
}
public BeanDefinition parseCustomElement(Element ele) {
return this.parseCustomElement(ele, (BeanDefinition)null);
}
public BeanDefinition parseCustomElement(Element ele, BeanDefinition containingBd) {
String namespaceUri = this.getNamespaceURI(ele);
NamespaceHandler handler = this.readerContext.getNamespaceHandlerResolver().resolve(namespaceUri);
if (handler == null) {
this.error("Unable to locate Spring NamespaceHandler for XML schema namespace [" + namespaceUri + "]", ele);
return null;
} else {
return handler.parse(ele, new ParserContext(this.readerContext, this, containingBd));
}
}
文章标题:spring源码阅读(二) Bean加载之自定义标签加载
文章链接:http://soscw.com/essay/29986.html