spring单例bean的创建流程
- 简化创建流程图
-
- 流程说明
- 详细创建流程图
简化创建流程图
文章图片
流程说明 1 当spring容器在启动的时候或者启动完成后显示调用getBean方法时来获取bean实例的时候,都会调用这个doGetBean方法
- doGetBean方法首先通过调用getSingleton判断这个bean能不能拿到,如果可以直接返回;
- doGetBean会根据不同的作用域,执行不同的操作,如单例、多例、request、session等
- 实例化,调用createBeanInstance方法
- 属性注入,调用populateBean方法
- 初始化,调用initializeBean方法
- 通过resolveBeanClass获取beanClass对象,如果此类之前加载过直接返回,如果没有加载过则通过ClassLoader加载;
- 实例化,通过无参构造方式实例化或通过@Autowire注解的构造方法实例化
- 调用AutowiredAnnotationBeanPostProcessor#postProcessProperties
- 通过AutowiredFieldElement或AutowiredMethodElement调用inject方法
- bean注入最终又会调用getBean方法(循环依赖产生的地方)
- 拿到bean对象后,通过反射完成属性注入
- 调用实现Aware接口的方法:
- 调用 BeanNameAware 的 setBeanName 方法
- 调用 BeanClassLoaderAware 的 setBeanClassLoader
- 调用 BeanFactoryAware 的 setBeanFactory 方法
- 大部分在ApplicationContextAwareProcessor#postProcessBeforeInitialization方法中进行Aware接口的调用
- 执行 BeanPostProcessor 的初始化前的方法
- 调用 BeanPostProcessor 的postProcessBeforeInitialization方法
- 调用普通初始化方法
- 调用 afterPropertiesSet 方法
- 调用 用户定义的初始化方法,即init-method 属性配置的方法
- 执行 BeanPostProcessor 的初始化后的方法
- 调用 BeanPostProcessor 的postProcessAfterInitialization方法
详细创建流程图 该图还未枝叶未画完,待续
推荐阅读
- spring|java springboot前后端不分离项目
- demo|基于spring、mvc和easy UI的驾校后台管理系统
- java项目精品实战案例|基于Java+SpringMvc+vue+element实现驾校管理系统详细设计
- 历时三个月,史上最详细的Spring注解驱动开发系列教程终于出炉了,给你全新震撼
- Java|合格的Java工程师要掌握哪些知识点
- java|三、SpringCloud-Alibaba集成config配置中心与gateway网关
- 任务定时|SpringBoot整合Quartz定时任务持久化到数据库的开发。超详细,可用
- spring|2020年Spring全家桶面试题大全含答案共79题
- spring|Spring源码剖析(一)(编译 spring 源码(2022最新版))