1、介绍
BeanDefintion是一个接口,主要有三种实现ChildBeanDefinition(子bean)、GenericBeanDefinition(创建实例)、RootBeanDefinition(父bean)
![](https://i-blog.csdnimg.cn/blog_migrate/f94dd64b26f3a36cf6259f4b4a3096d5.png)
1.2、创建实例GenericBeanDefinition
代码createBeanDefinition作用就是实现该功能
![](https://i-blog.csdnimg.cn/blog_migrate/5476a973383ef42d8e9cece7a1233d5d.png)
1.3、createBeanDefinition创建承载属性实例
![](https://i-blog.csdnimg.cn/blog_migrate/abd0197ff5f00cfae1284877670cb501.png)
1.4、BeanDefinitionReaderUtils工具类
![](https://i-blog.csdnimg.cn/blog_migrate/d87c540fe16293427263567a5adfdbdd.png)
2、解析各种属性
创建bean实例后,需要解析各种属性parseBeanDefinitionAttributes
![](https://i-blog.csdnimg.cn/blog_migrate/2fd44c068ad1cee33fd9632b6726ab46.png)
2.1、parseBeanDefinitionAttributes方法
主要对scope、singleton、abstract、lazy-init、autowire、dependency-chenk、depends-on、autowire-candidate、primary、init-method、destroy-method、factory-method、factory-bean解析
![](https://i-blog.csdnimg.cn/blog_migrate/7ff6a9703bcf61bc25c1387821ac4401.png)
3、解析子元素Meta
![](https://i-blog.csdnimg.cn/blog_migrate/b5217d675ac6fc0f2b86296a92305c7f.png)
主要是获取当前节点的所有子元素,然后提取meta,然后使用key、value构造BeanMetadataAttribute、记录信息
![](https://i-blog.csdnimg.cn/blog_migrate/4d6c1d4284ff51b92c7292d98dabe3c2.png)
4、解析子元素lookup-method、解析子元素replaced-method、解析子元素constructor-arg、解析子元素property、解析子元素qualifier
![](https://i-blog.csdnimg.cn/blog_migrate/c0467295e0e7b9db9adaea66b2ee5e24.png)