Spring bean的创建过程

时间:2023-03-29 15:06:45

总纲领

  1. 解析读取配置文件
  2. 解析配置文件,并替换通配符
  3. 实例化
  4. 赋值

1.解析读取配置文件

通过BeanDefinitionReader 读取到配置信息。
BeanDefinitionReader: 定义规范,方便拓展
比如你是用xml 还是用properties 或者yaml 只要实现了BeanDefinitionReader 就可以被解析

2.获取到 beanDefinition 后 如果配置内容中有通配符怎么办?

比如:

<property name = url value ="${jdbc.url}">

${jdbc.url} 是不是要替换成连接串?这个时候就需要
BeanFactoryPostProcessor 来完成这个替换操作。

PostProcessor 分类

PostProcessor分为

name 作用域
BeanFactoryPostProcessor 增强/修改beanDefinition信息
BeanPostProcessor 增强/修改bean信息

3.进入到BeanFactory

BeanFactory是整个容器的根接口,也是容器的入口
反射
Constructor ctor = clazz.getConstructor();
Object obj = ctor.instance();

这里用反射做如下操作:

状态 具体内容 补充
实例化 在堆里面开辟一个空间 对象的属性值都是默认值
初始化 给属性设置值 1.填充属性,2.执行初始化方法
完成 完整对象 context.getBean()

初始化过程

  1. 填充属性
  2. 设置Aware接口的属性
  3. BeanPostProcessor:before
  4. 执行init-method
  5. BeanPostProcessor:after
  6. 对象创建完成

总结

bean的创建过程用到了IOC 思想,控制反转 ,定义一个接口,不同的实现方式:比如 bean的定义可以是xml也可以是propertis也可以是ymal
都只要实现BeanDefinitionReader 接口就行了

同时bean的创建过程也用到了AOP的思想
具体体现在BeanFactoryPostProcessorBeanPostProcessor
在原有动作的前提下用代理的方式实现功能的增强