Spring源码阅读笔记

承载spring配置的类AbstractBeanDefinition

对于这个类的讲解,spring源码深度解析一书中已解释的十分详尽精辟。

 文章摘要(摘自《spring源码深度解析》:

BeanDefinition 个接口,在 Spring 中存在三种实现: RootBeanDefinition ChildBeanDefinition 以及 GenericBeanDefinition。 三种实现均继承了 AbstractBeanDefiniton,其中 BeanDefinition 是配置文件<bean>元素标签在容器中的内部表示形式 < bean>元素标签拥有 class、 scope、 lazy-init 等配置属性, BeanDefinition 则提供了相应的 beanClass 、scope、 lazyInit 属性, BeanD finition 和< bean>中的属性是一一对应的 RootBeanDefinition 是最常用的实现类,它对应一般性的<bean>元素标签, GenericB anDefinition 是自 2.5 版本以后新加入的 bean 文件配置属性定义类,是一站式服务类。

在配置文件中可以定义父<bean >和子<bean >,父<bean>用 RootBeanDefinition 表示,而子 < bean>用 ChildBeanDefiniton 表示,而没有父<bean > 的 < bean>就使用 RootBeanDefinition 表示。 AbstractBeanDefinition 对两者共同的类信息进行抽象。

Spring 通过 BeanDefinition 将配置文件中的<bean >配置信息转换为容器的内部表示,并将 这些 BeanDefiniton 注册到 BeanDefinitonRegistry中。 Spring 容器的 BeanDefinitionRegistrγ 就像是Spring 配置信息的内存数据库,主要是以 map 的形式保存,后续操作直接从BeanDefinitionRegistry 中读取配置信息。

这是该类的属性,大部分都是spring的常用配置。

spring自定义标签的加载过程

自定义标签的使用:

 文章摘要(摘自《spring源码深度解析》:

扩展 Spring 自定 义标签配置大致需要以下几个步骤(前提是要把 Spring Cor巳包加入项目中)

  • 创建一个需要扩展的组件
  • 定义一个 XSD 文件描述组件内容
  • 创建一个文件,实现 BeanDefinitionParser 接口,用来解析 XSD 文件中的定义和组件定义
  • 创建一个 Handler 文件,扩展自 NamespaceHandlerSupport ,目的是将组件注册到 Spring 容器
  • 编写 Spring.handlers 和Spring.schemas 文件

核心代码:

BeanDefinitionParserDelegate.parseCustomElement(Element ele, @Nullable BeanDefinition containingBd)

@Nullable
	public BeanDefinition parseCustomElement(Element ele, @Nullable BeanDefinition containingBd) {
//获取命名空间
		String namespaceUri = getNamespaceURI(ele);
		if (namespaceUri == null) {
			return null;
		}
// 使用命名空间解析器,从META-INF目录下加载spring.handlers文件,文件中存储这自定义命名空间和其对应的自定义处理器
		NamespaceHandler handler = this.readerContext.getNamespaceHandlerResolver().resolve(namespaceUri);
		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));
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值