本文基于图灵课堂周瑜老师的讲解整理,包括spring bean加载的过程,主要是扫描BeanDefinition以及初始化非懒加载单例Bean两部分,源码取自SpringFramework 5.3.22
1. Bean扫描
本小节介绍的是Spring从给定的扫描位置扫描到待加载的Bean,生成BeanDefinitionMap的过程
SpringBoot启动过程中使用的ApplicationContext是 AnnotationConfigApplicationContext
,而它初始化的时候会顺带初始化两个 BeanDefinitionReader
: AnnotatedBeanDefinitionReader
和 ClassPathBeanDefinitionScanner
,前者是可以直接通过给定的class注册Bean,后者则可以扫描给定目录下所有的目标Bean,下面着重介绍后者扫描Bean组件的过程。
ClassPathBeanDefinitionScanner
扫描的入口是public int scan(String... basePackages),而真正做事情的是protected Set
下面将以上部分代码展开去讲
即对应 findCandidateComponents
方法的操作,该方法如下:
- 首先来判断是否有对应的索引,即看
componentsIndex
是否有值,它加载的是META-INF/spring.components
中的信息,内容格式如下:
com.sgw.demo=org.springframework.stereotype.Component
相关文章
程序员转行做运营,曾被逼得每天想离职,最后…
当我是一名程序员时,我认为操作会很容易。切换到手术室后,我每天都会考虑离开。[En]When I was a programmer, I thought it would be easy to do ...
西门子PLC数据读取 Observer设计模式
当我听到这个需求的时候,我差点爆粗口(实际上可能已经爆了,不过我忘了)。 需求刚开始是: C#连接PLC Modbus读取值。 我用C#写完了,觉得太简单了,还弄了个窗体。 接着是: 只读值。这太简单...
Java通过socket和DTU,RTU连接工业传感器通信
现在做DTU传感器监测数据一块,给大家分享如何通过socket技术连接到DTU,并能和DTU下面的传感器通信的,分享一下自己的心得和体会。 总体架构图 先来看下整体网络结构图。 工业名称解释 传感器:...
智慧树/知到 一键刷课脚本代码(网页自动版 2020最新版)
本人亲测可用,两种代码皆可 功能: 自动设置 1.5倍速度(最快),静音,自动切换下一课,跳过答题弹窗 进入智慧树网页版 ,按键盘F12出现以下界面,点击Console(控制台),然后把下方代码👇复制...
迭代器Iterator
迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃...
JS使用BLOB方式下载Excel导致文件损坏的问题解决
这两天写一个后台生成Excel返回前端下载的功能,遇到了一个问题,记录一下。 前端点击下载按钮,文档损坏,但是使用Postman调用下载,文档却是正常的。 exportExcel(exportExce...
【Java分享客栈】一文搞定京东零售开源的AsyncTool,彻底解决异步编排问题。
一、前言 本章主要是承接上一篇讲CompletableFuture的文章,想了解的可以先去看看案例: https://juejin.cn/post/7091132240574283813 Comple...
SpringMVC转发和重定向区别!
在servlet中,转发和重定向是由request和response完成的。两者之间的区别请看我之前的文章。那么在springMVC中是如何完成的呢? /转发/ @RequestMapping("/l...
Spring Boot 操作 Redis
参考资料 说在前面 步骤 1. 新建 Maven 项目并引入 spring-boot-starter-data-redis 2. 编写 application.yml 3. 编写缓存服务和Contro...
Android 虹软人脸识别SDK-人脸对比
准备 : 登录官方网站,获取SDK,进行个人验证后新建项目,获取APP_ID,和SDK_KEY; https://ai.arcsoft.com.cn/ucenter/resource/build/in...
Springboot3.0+spring6.0+JDK17+配置jsp和打war包
由于某些缘故,公司的产品需要升级,但并不希望花费大量时间重写前端代码(原来的就不是前后分离的)。所以虽然spring和springboot都升级为最新的版本,但是依然还是需要支持jsp,并继续用打包为...