Spring的Bean的生命周期
零,将class文件封装到BeanDefinition中
0.1 涉及到的一些类:
BeanDefinition,
BeanDefinitionRegistor,
BeanDefinitionRegistorPostProcessor,
BeanFactoryPostProcessor
0.1 .1 BeanDefinition bean的定义,封装了类的信息
0.1 .2 BeanDefinitionRegistor 定义了怎么将类封装到BeanDefinition的方法等
0.1 .2 BeanDefinitionRegistorPostProcessor 使用了BeanDefinitionRegistor的方法创建了BeanDefinition
0.1 .2 BeanFactoryPostProcessor 对BeanDefinition进行修改等
零点五,实例化前选择合适的构造器
0.5.1 public比其他优先级高
0.5.2 使用标注了@Autowired的构造器 @Autowired只能有一个(@Autowired(required=false)可以有多个)
0.5.3 有多个构造器默认用参数最多的等等
一,实例化
getBean() 方法
先去一,二,三级缓存查看缓存中有没有,没有则创建bean,并且将bean的lambda表达式(可能返回bean本身,可能返回aop代理对象bean)放入三级缓存。《三级缓存解决循环依赖问题》
二,属性填充
三,初始化
初始化前后有BeanPostProcessor对bean做一些处理。然后放入一级缓存,删除二级 三级缓存
四,使用
五,销毁