1、默认标签的解析
在parseBeanDefinitions(root, this.delegate),主要对import、alias、bean、beans进行不同的处理
![](https://i-blog.csdnimg.cn/blog_migrate/82420e82961b600e1728ce27719b48eb.png)
2、bean标签解析
bean解析最为复杂
![](https://i-blog.csdnimg.cn/blog_migrate/ed0a1c75d08dc90613449b1b24761cf0.png)
2.1、解析
通过BeanDefinitionParserDelegate的parseBeanDefinitionElement进行元素解析,并返回BeanDefinitionHolder,通过这个方法已经加载配置文件的各种属性
![](https://i-blog.csdnimg.cn/blog_migrate/43923ede452039fadc4d86f7885fdf12.png)
2.2、自定义标签解析
如果在默认标签的子节点下面有自定义的属性,再次解析
2.3、对解析后的bdHolder进行注册
由BeanDefinitionReaderUtils的registerBeanDefinition方法
2.4、bean加载完成以后,通知相关监听器
3、具体解析
3.1、parseBeanDefinitionElement
![](https://i-blog.csdnimg.cn/blog_migrate/57c2ea4e4d57c022e3f917538d3b752b.png)
3.2、实现步骤
3.2.1、获取id和name属性
![](https://i-blog.csdnimg.cn/blog_migrate/ad4965c2a6d1c2f6714b3fc40d54347a.png)
3.2.2、解析其它所有属性
![](https://i-blog.csdnimg.cn/blog_migrate/51f3ac89925043458cf3b3e35b5c8737.png)
3.2.3、如果检测到没有beanName,则使用默认规则生成
![](https://i-blog.csdnimg.cn/blog_migrate/e1c9378b21b24e7122ccfd505d0a0590.png)
3.2.4、分装到BeanDefinitionHolder进一步封装
![](https://i-blog.csdnimg.cn/blog_migrate/256b9fcdac4c581a3db874c845aa7785.png)