参考黑马程序员视频https://www.bilibili.com/video/BV15b4y117RJ?p=143&spm_id_from=pageDriver
理解一些总结概念:
1.context就是我们所说的容器,有子容器还有父容器。
2.bean之间有依赖关系,这种关系决定了他们的创建顺序
3.context.fresh()方法就是去创建获取bean。
4.有三种scope范围的创建销毁bean,scope实际是决定了什么时候触发创建什么时候销毁
5.可通过不同方式去创建bean(例如autowiredannotation,默认构造)
6.beanpostprocessor叫做"bean后处理器",作用是识别注解并封装为injectionmetadata注解元数据,由注解元数据类完成注入操作。
7.bean在要创建时首先会去检查三级缓存,三级缓存同时又解决了循环依赖,之后会去检查容器(分子父容器)先去子容器查找。
第一阶段
三级缓存解决了循环依赖
第二阶段
先找子容器里面的bean子容器找不到然后找父容器里面的bean。
第三阶段
控制bean的创建顺序(没有显示依赖)
第四阶段
按照scope属性去创建
常见的三种scope的生存范围
第一种:单例范围
refresh开始到close结束。
refresh还是调用了getbean方法
第二种:多例模式bean
只有在调用了容器的getbean方法时才会创建bbean
销毁需要手动调用
第三种request
同样也是在getbean方法的时候进行创建操作
prototype就是我们说的多例bean
创建bean的方式
刚建立的bean需要建立依赖,也就是注入其他bean可以想象springboot注册@Service等等,就可以在本层使用该bean。
优先级越往下越高
之后我们要初始化bean:
1.实现aware接口
2.三种初始化方法
3.创建aop代理
以上初始化方法执行顺序为
aware接口,注解,接口(initializingbean),自定义(beandefinition)
对应下面输出4213
最后需要标记销毁bean
自定义scope包括request等。
第六阶段类型转换



