Spring在实例化之前做的一个‘小事‘

Spring在实例化之前,做了一件事,那就是向容器中注册BeanDefinitions,因为后面的实例化就是实例化这些BeanDefinitions所描述的类.

从名字上我们也可以知道,BeanDefinitions就是Bean的定义描述信息.

而我们日常开发中都是接触的

<bean id="" class="" />
<context:component-scan base-package="" />
<aop:aspectj-autoproxy proxy-target-class="true" />

这些配置标签其实是由指定的Parser解析器去解析成BeanDefinitions,
比如component-scan标签,对应着唯一的一个Parser解析器.

那么这些Parser又是哪里来的呢?
在spring-beans,spring-context等Spring的大部分模块下,META-INF/目录下,都有一个spring.handlers文件,像阿里的Dubbo模块下也有spring.handlers文件.
这些文件都是以key-value存储内容.

Spring在启动之后,会读取spring.handlers文件,将里面的内容存储起来,也会实例化里面的类.
在这里插入图片描述
比如我们拿截图中的第一个org.springframework.context.config.ContextNamespaceHandler类来说,在它实例化之后,会注册很多Parser解析器.

在这里插入图片描述
比如截图里面的component-scan标签就有一个唯一对应的ComponentScanBeanDefinitionParser解析器.

等Spring拥有了这些解析器之后,它就会解析读懂我们在配置文件中配置的内容了.
这些解析器就是翻译官,将配置文件中配置的内容,翻译成对应的BeanDefinition,
然后Spring根据BeanDefinitions信息就可以实例化对象了.


个人站点
语雀

公众号

微信公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值