Spring getBean流程
Bean的生命周期(创建Bean的流程)
简单来说,Bean的生命周期只有四个阶段:实例化 Instantiation --> 属性赋值 Populate --> 初始化 Initialization --> 销毁 Destruction。
getBean方法是spring ioc的核心,阅读getBean方法的源码也是理解spring容器工作原理所必须要做的事情!
我们先来看一下getBean方法,getBean的具体实现逻辑在AbstractBeanFactory类里面的doGetBean方法中。
首先简略地介绍一下整体的执行流程:
1.根据传入beanName获取bean的别名
2.尝试从缓存中获取之前被实例化过了的单例bean
3.根据上面获取到的实例进一步获取bean(因为获取到的可能是一个工厂bean)
4.如果上面的步骤之后没有获取到bean那么就需要创建bean了
5.先根据缓存判断一下当前的bean是否正在被创建,如果是的话表示依赖循环了
6.尝试获取当前工厂的父工厂并从当前工厂的bean定义缓存中获取bean定义委托父工厂去生成
7.如果当前要获取的bean只是为了进行类型检查就标记bean已经被创建
8.同当前bean的父类合并bean的定义,并检查获取到的bean定义是不是抽象的
9.通过上面获取到的bean定义找到当前bean的依赖bean并递归调用getBean方法获取依赖bean
10.判断bean的scope是单例的还是原型的或者是其他的创建bean
11.根据要求返回的bean类型通过convertService来对bean进行转换
————————————————
版权声明:本文为CSDN博主「完美的工程学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dcx5173/article/details/118344056
- 参考
- https://blog.csdn.net/dcx5173/article/details/118344056?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-118344056-blog-120083309.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-118344056-blog-120083309.pc_relevant_aa&utm_relevant_index=2
- https://blog.csdn.net/zhang_qing_yun/article/details/120083309
Spring getBean流程相关推荐
- 简单理解Spring getBean流程
本文直接讲述流程,不贴代码,全是干货,面试必看,口口相传. 熟悉Spring启动流程的同学应该清楚,refresh()是最为重要的关键方法,其调用的finishBeanFactoryInitializ ...
- Spring IoC 源码系列(五)getBean 流程分析
一.FactoryBean 用法讲解 在分析源码流程之前,我们先来看一下 FactoryBean,乍一看这家伙和 BeanFactory 很像,它们都可以用来获取 bean 对象,简单来说 Facto ...
- Spring事务处理流程和原理(动脑学院笔记)
一.事务理论 1.事务的特性 2.事务的隔离级别 3.事务的传播 4.利用数据库事务实现应用事务控制 要求:同一个事务需要同一个库的同一个连接. 5.单一数据源,如何让事务的所有操作使用同一连 ...
- 分布式锁 动态代理 Java数据结构List,Set,Map,Spring执行流程,Spring MVC组件
这里对今日的内容进行总结: 分布式锁具备的条件: 具备的条件: 在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行. 高可用的获取锁与释放锁. 高性能的获取锁与释放锁. 具备可重入的特 ...
- Java框架之SpringMVC 05-拦截器-异常映射-Spring工作流程
Java框架之SpringMVC 05-拦截器-异常映射-Spring工作流程 参考文章: (1)Java框架之SpringMVC 05-拦截器-异常映射-Spring工作流程 (2)https:// ...
- Spring Batch流程介绍
Spring Batch流程介绍: 上图描绘了Spring Batch的执行过程.说明如下: 每个Batch都会包含一个Job.Job就像一个容器,这个容器里装了若干Step,Batch中实际干活的也 ...
- spring启动流程(一):启动流程概览
1. spring 启动流程概览 在前面 demo 的 main()方法中,有这么一行: ApplicationContext context =new AnnotationConfigApplica ...
- 初次创建spring boot流程和注意事项
新手初次创建spring boot流程和注意事项 一.项目整合与部署存在的问题 1.1 SSM手动整合存在的问题 SSM整合步骤多.配置繁琐 项目进行服务器部署步骤繁琐 1.2 如何简化这些繁琐的配置 ...
- spring getBean()方法解析概述
1.getBean(beanName) 整体概述 1.transformedBeanName(name) name可能是别名,将别名(alias)解析成真正的beanName 截取&beanN ...
最新文章
- EWSD命令输入格式解释
- BZOJ 1016 最小生成树计数
- Python十段经典代码
- C程序设计语言--第五章:指针与数组
- PowerBuilder调用.Net编译好的DLL
- 问题8:NavigationController 自定义返回按钮I
- 一个问题引发的连环血案
- Mysql的基础知识
- 互联网Internet体系结构以及网关协议OSPF
- SQLPLUS SPOOL命令使用
- chrome版本太旧 无法更新
- unity2018关联不到vs_vs2015与unity2018兼容性问题
- 微型四轴飞行器(1)
- 将ttc改为otf_Font Renamer字体更名、重命名工具_支持ttf、ttc、otf、pfb字体 V3.0 下载...
- 分享一款超级好用的前端开发工具-webstorm for mac下载
- 解决谷歌的but your computer or network may be sending automated queries
- 微信播放在服务器视频无法播放音乐,解决ios微信浏览器中audio和video音乐视频无法自动播放等问题...
- python通过ssh通道连接PostgreSQL数据库(mysql等类同)
- VS2019安装失败
- spring cloud eureka 样式没有了,wro.css wro.js 404