码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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
  • 相关阅读:
    前端基础建设与架构10 代码拆分和按需加载:缩减 bundle size,把性能做到极致
    left join查询耗时太慢,添加索引解决问题
    Nwafu-Oj-1444 Problem l C语言实习题七——2.结构体数组的定义与引用
    python基于PHP+MySQL的连锁商店仓库管理系统
    java计算机毕业设计中医保健网站源码+系统+lw+数据库+调试运行
    【老生谈算法】matlab实现连续时间系统的频域分析与仿真——频域分析
    “蔚来杯“2022牛客暑期多校训练营2,签到题GJK
    【Leetcode HOT100】积最大子数组 c++
    chatgpt,神经网络与拥塞控制
    Anomalib库安装以及使用
  • 原文地址:https://blog.csdn.net/u012019209/article/details/124877186
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号