Spring IoC的细节--DefaultNamespaceHandlerResolver.resolve(String namespaceUri)

BeanDefinitionParserDelegate:

	@Nullable
	public BeanDefinition parseCustomElement(Element ele, @Nullable BeanDefinition containingBd) {
   
		//解析节点的命名空间
		String namespaceUri = getNamespaceURI(ele);
		if (namespaceUri == null) {
   
			return null;
		}
		//解析命名空间,得到一个命名空间处理器
		//重点
		NamespaceHandler handler = this.readerContext.getNamespaceHandlerResolver().resolve(namespaceUri);  //代码1 
		if (handler == null) {
   
			error("Unable to locate Spring NamespaceHandler for XML schema namespace [" + namespaceUri + "]", ele);
			return null;
		}
		//开始解析  
		//主线 重点
		return handler.parse(ele, new ParserContext(this.readerContext, this, containingBd)); //代码2
	}

代码1,执行获取当前命名空间的命名空间处理器

DefaultNamespaceHandlerResolver:

public NamespaceHandler resolve(String namespaceUri) {
   
		//获取所有的handlerMapping,即命名空间与对应NamespaceHandler实现的映射
		Map<String, Object> handlerMappings = getHandlerMappings();  //代码2
		// 我们案例中则为ContextNamespaceHandler
		// http://www.springframework.org/schema/context -> org.springframework.context.config.ContextNamespaceHandler
		Object handlerOrClassName = handlerMappings.get(namespaceUri);
		if (handlerOrClassName == null) {
   
			return null;
		}
		else if (handlerOrClassName instanceof NamespaceHandler) {
   
			//假如获取到的对象为NamespaceHandler,则直接返回,不过一般获取的为类路径信息,即下面的分支
			return 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值