![](https://img.haomeiwen.com/i23353704/35d0024be825e837.png)
5.注册
对应的解析结果都放在对应容器后, 开始注册BeanDefinition,以及对应接口的调用
![](https://img.haomeiwen.com/i23353704/3b9b8dd64b85603f.png)
遍历 ConfigurationClassParser 里的 ConfigurationClass集合,开始注册
![](https://img.haomeiwen.com/i23353704/33dec0eb27b319fa.png)
5.1 进行@Conditional 判断
![](https://img.haomeiwen.com/i23353704/3e7156d5da27c88c.png)
5.2 注册被@Import导入的类,不包含 实现了 ImportBeanDefinitionRegistrar,DeferredImportSelector接口的类
![](https://img.haomeiwen.com/i23353704/bb984a01c5e005bc.png)
创建BeanDefinitionHolder对象
并注册到容器中
![](https://img.haomeiwen.com/i23353704/a79c9b283f71b2ae.png)
5.2 将每个带有@Bean的方法封装成BD,填充属性
遍历beanMethods容器,
![](https://img.haomeiwen.com/i23353704/cad43d2ab0ce3d6c.png)
ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForBeanMethod (beanMethod) 方法
5.2.1 创建BeanDefinition对象
![](https://img.haomeiwen.com/i23353704/f185e2ec23268753.png)
5.2.2 设置FactoryBeanName,
设置FactoryBeanName,以后用 FactoryBeanName对应的方法实例化
![](https://img.haomeiwen.com/i23353704/2256f9975a44e62c.png)
5.2.3 填充BD的其他属性
设置initMethod,destroyMethod,Scope,autowireCandidate
![](https://img.haomeiwen.com/i23353704/6aead66ae2e5ac9f.png)
5.2.4 注册BeanDefinition
![](https://img.haomeiwen.com/i23353704/441778e04105d7dd.png)
5.3 注册@ImportResource导进来的applicationContext.xml文件配置的类
@ImportResource可以导入一个applicationContext.xml文件,注册里面配置的类
![](https://img.haomeiwen.com/i23353704/fc787a3de26fa634.png)
![](https://img.haomeiwen.com/i23353704/7d7bffd569809da1.png)
![](https://img.haomeiwen.com/i23353704/b7dd02210a929240.png)
接下来的代码似曾相识,就是 解析applicationContext.xml配置文件的代码,之前的文章里有,这里就不赘述了
![](https://img.haomeiwen.com/i23353704/be5a651dc91a9977.png)
5.4 调用导入@Import进来的ImportBeanDefinitionRegistrars接口类型的registerBeanDefinitions方法
![](https://img.haomeiwen.com/i23353704/d36979e5e63178f7.png)
遍历ConfigurationClass对象里的importBeanDefinitionRegistrars集合,调用ImportBeanDefinitionRegistrar接口的registerBeanDefinitions()方法
![](https://img.haomeiwen.com/i23353704/ea114f00f1b5e47f.png)
最终会调用到我们自己被@Import导进来的,实现了ImportBeanDefinitionRegistrar接口的registerBeanDefinitions方法里
![](https://img.haomeiwen.com/i23353704/d20333fa3cbd1b68.png)
网友评论