美文网首页
Spring在实例化之前做的一个'小事'

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

作者: 赵信信官属 | 来源:发表于2020-08-25 20:20 被阅读0次

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文件,将里面的内容存储起来,也会实例化里面的类.


image.png

比如我们拿截图中的第一个org.springframework.context.config.ContextNamespaceHandler类来说,在它实例化之后,会注册很多Parser解析器.

image.png

比如截图里面的component-scan标签就有一个唯一对应的ComponentScanBeanDefinitionParser解析器.

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

个人站点: https://www.infuq.com/

公众号: Netty历险记

相关文章

网友评论

      本文标题:Spring在实例化之前做的一个'小事'

      本文链接:https://www.haomeiwen.com/subject/bbozjktx.html