spring如何解析元素
class DefaultNamespaceHandlerResolver:
public NamespaceHandler
resolve(String namespaceUri) {
Map<String, Object> handlerMappings = getHandlerMappings();
Object handlerOrClassName = handlerMappings.get(namespaceUri);
String className = (String) handlerOrClassName;
try {
Class<?> handlerClass = ClassUtils.forName(className,
this.classLoader);
NamespaceHandler namespaceHandler = (NamespaceHandler) BeanUtils.instantiateClass(handlerClass);
调用init方法
namespaceHandler.init();
...
}
class NamespaceHandler:
public void init() {
registerBeanDefinitionParser(
"scan",
new MapperScannerBeanDefinitionParser());
}
class NamespaceHandlerSupport:
protected final void registerBeanDefinitionParser(String elementName, BeanDefinitionParser parser) {
this.parsers.put(elementName, parser);
}
最终会根据元素的名字去选择合适的解析器对元素进行解析, 如果自己使用SAX解析xml,当元素没有命名空间或者解析器的命名空间支持特性没有打开时是空串。注意,可以使用SAXParserFactory的public void setNamespaceAware(boolean awareness)打开支持命名空间特性。
转载请注明原文地址: https://ju.6miu.com/read-10863.html