Spring BeanDefinition 生成所有bean的配置信息

Spring BeanDefinition 生成所有bean的配置信息,第1张

这个过程会记录下所有的bean定义,这只是定义,还没生成具体的bean。

Map<String, RootBeanDefinition>mergedBeanDefinitions。

为了不至于每次用到配置信息的时候都去解析一遍配置文件,我们需要将解析结果保存起来。而保存解析结果这个过程就是BeanDefinition的注册。

顺着obtainFreshBeanFactory方法,进入到AbstractRefreshableApplicationContext的refreshBeanFactory方法,这个方法的主要功能就是创建默认的IOC容器和Xml配置文件的相关 *** 作。

执行完,bean定义信息就加载完成了,后面就根据这些定义信息生成bean。

容器启动时,先读取配置文件,如果发现配置文件里设置了扫描注解,则扫描注解生成每个bean的BeanDefinition放入BeanDefinition 容器。再继续读取xml,将配置的bean放入到BeanDefinition 容器中,这样bean定义容器就有了所有的BeanDefinition。

下一步就根据这些bean定义生成bean对象,并注入依赖的bean,如果依赖的bean没有,则继续生成,这样递归下去,知道所有的bean都生成结束。

构造一个IOC容器需要如下几个步骤:

第一步:资源的定位。所谓资源就是指Spring里众多的XML配置文件,要获取到配置文件里面的信息,首先是要找到它。

第二步:加载和解析资源文件。XML文件里面定义的一些节点,和Spring里面定义的数据结构不匹配,那么就需要按照Spring的解析规则将XML解析成Spring需要的。

第三步:将解析完的数据结构注册到IOC容器中。Spring中内部的数据结构叫BeanDefinition。

经过以上三个步骤之后,IOC容器已经构造好,但是还是不能被直接使用。BeanDefinition只是配置文件里的配置在IOC中建立的一个映射,对于IOC容器来说最重要的依赖关系都还没有注入呢,相当于光有一个壳,内容还没有填充。

这里又有个Spring中重要的概念,叫做依赖注入。依赖的意思上文中有提到过吧,就是对象的引用关系嘛,注入是个动词,个人理解为设置,那依赖注入的意思不就是设置对象的引用关系了哇。

接下来这个过程是容器的实例化。容器的实例化只有一步,就是依赖注入。

完成IOC容器的构造和实例化之后,完整的IOC就建立好了。主线分析好了,接下来便可以顺藤摸瓜的学习源码了。

依赖注入主要有两个过程,一个是实例化Bean,另一个是将依赖关系注入到Bean中。

依赖注入的入口是我们熟悉的getBean方法。

import一般用于团队开发使用,可以将多个配置文件,导入合并为一个。

假设,现在项目中有多个人开发,这三个人负责不同的类的开发,不同的类需要注册在不同的bean中,文名可以利用import将所有人的beans.xml合并为一个总的!

    1. 张三 bean1.xml

    2. 李四 bean2.xml

    4.在总的applicationContext.xml中:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11409069.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存