springIOC-spring源码详解(二)
映入眼帘,源码里是大家都熟悉的三个方法,首先执行的是this(),调用构造函数,
通过AnnotatedBeanDefinitionReader这里会读取很多重要的初始类,
ConfigurationClassPostProcessor就是在这里注册,不然我们后面无法通过注解来解析和注册bean。
这个类实现了我们上篇文章说的两个接口,
BeanFactoryPostProcessor和BeanFactoryPostProcessorRegister。
前面说的都是注册成功配置类,后面在refresh()里开始解析配置类。
这里面会解析@bean,@importResource,@import,@ComponentScan。
后面finishBeanFactroyInitialization(beanFactory)实例化我们剩余的单例bean。
在实例化单实例的代码如上,先会通过freezeConfiguration冻结bean属性,禁止修改,其实就是把configurationFrozen参数改为false。
PreInstantiateSingletons()里先获取所有的beanNames,然后判断不是抽象,是单例,不是懒加载的进入。
当这里定义的bean没有实现factoryBean的时候,则走下面的getBean()。
前面的markBeanAsCreated就是标记当前bean正在创建的状态。
后面getDependsOn()则是当bean有@dependsOn注解的时候,会优先加载despendsOn的bean。
这里createBean则还是创建bean,在之前getSingleton会把bean标记成正在创建,解决循环依赖的时候,正在创建很关键。
这里开始调用一些扩展的后置处理器,调用完之后还是正式创建bean。
调用完成之后开始实例化bean。
实例化通过反射和工厂,反射通过@component直接作用在类上,spring实例化。工厂则是通过new的方法,比如@bean+configuration。
getEarlyBeanRefrence解决循环依赖的。
之后popuateBean填充属性,调用set方法进行赋值。
相关文章
- 【图文教程】Centos 7下安装Hadoop-管杀管埋的
- 【Flink教程-已解决】在idea中测试flink的时候,提示读取文件时候错误,提示文件不存在解决方案
- frp 服务器端 frps 一键安装卸载脚本
- 【Docker学习系列】Docker学习1-docker安装
- 高效、灵活、可自定义,腾讯云即时通信IM本地审核功能上线
- 新知 | 腾讯云视立方播放器技术实现与应用
- 云点播智能降码,成本与观看体验兼得的降本增效法宝
- 【Docker学习系列】Docker学习3-docker的run命令干了什么?docker为什么比虚拟机快?
- 【Docker学习教程系列】8-如何将本地的Docker镜像发布到私服?
- 「Docker学习系列教程」9-Docker容器数据卷介绍
- 「Docker学习系列教程」10-Docker容器数据卷案例
- Docker学习11-Docker常规方式安装软件
- 【图文教程】Windows11下安装Docker Desktop
- 若依前后端分离版本-添加定时任务提示目标字符串不在白名单解决办法:
- idea导入eclipse项目的时候,Java图标变成黄色小J了,怎么解决?
- Windos11下通过WSL安装centos7系统
- 【填坑】在windows系统下安装Docker Desktop后迁移镜像位置
- 【已经解决】./ 运行bash脚本文件出现 报错信息 /usr/bin/env: “bash\r“: 没有那个文件或目录
- Docker学习6-Docker镜像commit操作案例
- Acrobat 8安装步骤 PDF编辑器全版本软件下载