spring如何解析元素

来源:互联网 发布:光纤交换机端口类型 编辑:程序博客网 时间:2024/05/22 16:44

spring如何解析元素

class DefaultNamespaceHandlerResolver:public NamespaceHandler resolve(String namespaceUri) {        // 获取命名空间处理器        Map<String, Object> handlerMappings = getHandlerMappings();        // 获取对应的处理器classname        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(),注册BeanDefinition解析器方法     // 下面的例子是解析scan,也就是常用的<context:component-scan>注解扫描标签的解析器    registerBeanDefinitionParser("scan", new MapperScannerBeanDefinitionParser());  } class NamespaceHandlerSupport: // 所谓的注册也就是把解析器放到一个Map<String,BeanDefinitionParser> parsers中  protected final void registerBeanDefinitionParser(String elementName, BeanDefinitionParser parser) {        this.parsers.put(elementName, parser);    }

元素解析器调用链
最终会根据元素的名字去选择合适的解析器对元素进行解析,
如果自己使用SAX解析xml,当元素没有命名空间或者解析器的命名空间支持特性没有打开时是空串。注意,可以使用SAXParserFactory的public void setNamespaceAware(boolean awareness)打开支持命名空间特性。

0 0
原创粉丝点击