当前位置: 首页 > news >正文

Spring源码:Bean创建、Bean获取

Bean是怎么被创建,如何获取Bean,基于Spring 5.3.24版本,Spring Boot 可用 2.7.6

结论:

  • 创建:非懒加载的单实例bean在容器创建的时候创建,通过beanFactorydoGetBean方法,利用反射进行创建,创建完后存储在名为 singletonObjects 的map 集合里,key为bean名称,value为bean对象
  • 获取:获取bean时通过调用doGetBean方法从之前的map集合里进行获取

创建Bean

第一步:编写基础代码,编写一个实体类,在applicationContext配置文件中注册,跟断点进行调试
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这个refresh 很重要,
在这里插入图片描述

初始化非懒加载的单例 Bean
在这里插入图片描述

和上面方法注释一样
在这里插入图片描述

查看它的实现,如果有多个实现类,需要Debug的方式去跳转
在这里插入图片描述

来到DefaultListableBeanFactory如果不是FactoryBean
在这里插入图片描述
在这里插入图片描述

注释很明显,写的创建bean实例,而且我们这个是单例bean
在这里插入图片描述

这里必须用断点的形式,然后进入该方法
在这里插入图片描述

可以看到又回到了doGetBean方法里的createBean这里
在这里插入图片描述

然后通过断点进入该方法
在这里插入图片描述

断点进去
在这里插入图片描述

使用无参构造实例化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

看到通过反射创建了对象,newInstance 方法
在这里插入图片描述

何时加入容器中,在getSingleton 方法里创建完对象后
在这里插入图片描述
在这里插入图片描述

获取Bean在这里插入图片描述

getBeanFactory() 后调用 getBean()
在这里插入图片描述

可以看到这里又调用 doGetBean 方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最后得到bean
在这里插入图片描述

http://www.lryc.cn/news/470399.html

相关文章:

  • MetaArena推出《Final Glory》:引领Web3游戏技术新风向
  • 玩转Shodan:深度挖掘特定漏洞与脆弱资产的实战技巧
  • Java程序设计:spring boot(8)——API ⽂档构建⼯具 - Swagger2
  • 【Python】if选择判断结构详解:逻辑分支与条件判断
  • 邮件系统SSL加密传输,保护你的电子邮件免受网络威胁
  • Redis_写时复制(cow)
  • 【mysql进阶】4-5. InnoDB 内存结构
  • 从零入门扣子Bot开发
  • 中药是怎么计价的 复制药方文本划价系统操作教程
  • 怎么做网站?
  • Centos Stream 9部署Zabbix7.0LTS
  • 深入理解Allan方差:用体重数据分析误差的时间尺度与稳定性
  • Elasticsearch 解析:倒排索引机制/字段类型/语法/常见问题
  • 数字后端零基础入门系列 | Innovus零基础LAB学习Day5
  • Redis 内存回收策略小结
  • React常用前端框架合集
  • python对文件的读写操作
  • Redis工具类(解决缓存穿透、缓存击穿)
  • Air780E量产binpkg文件的获取方法
  • C++STL之stack
  • git的学习之远程进行操作
  • 蓝桥杯普及题
  • Spreadsheet导出excel
  • Leetcode|454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和
  • 使用ceph-csi把ceph-fs做为k8s的storageclass使用
  • 太速科技-212-RCP-601 CPCI刀片计算机
  • 【解决 Windows 下 SSH “Bad owner or permissions“ 错误及端口转发问题详解】
  • 使用预训练的BERT进行金融领域问答
  • ReactOS系统中MM_REGION结构体的声明
  • web相关知识学习笔记