本文基于图灵课堂周瑜老师的讲解整理,包括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
相关文章
阿里面试:MySQL如何设计索引更高效?
数据库系列迄今已更新。我想你对所有的概念都有大致的了解。当我阅读本周的评论时,我发现一位网友提出了一个有趣的问题:帅冰是如何设计索引的?如何设计索引?如何更有效地设计?[En]The database...
IDEA使用Gittee提交代码
今天给大家分享一下如何从idea提交代码到gitee上面。 1.先在gitee上创建仓库 2.填写相应的信息 3.下载git 直接next一站式安装 4.鼠标右键点击 Git Bash Here, 通...
SpringCloud微服务实战——搭建企业级开发框架(四十四):【微服务监控告警实现方式一】使用Actuator + Spring Boot Admin实现简单的微服务监控告警系统
业务系统正常运行的稳定性十分重要,作为SpringBoot的四大核心之一,Actuator让你时刻探知SpringBoot服务运行状态信息,是保障系统正常运行必不可少的组件。 spring-boot-...
字符串匹配—KMP算法
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后...
3.上海郊区某家公司自己眼瞎做错的题
switch。。。case public static void main(String[] args) { int result = 0; int i = 2; switch (i) { case ...
分享一个网上搜不到的「Redis」实现「聊天回合制」的方案
前言 为什么说网上搜不到,因为关于聊天回合制的方案作者本人快把百度搜秃噜了也没找到,好在最终是公司一个关系不错的大佬帮提供了点思路,最终作者将其完整实现了出来。 分享它,你可以收集它。万一有一天你遇到...
Java(12)静态字段与静态方法
之前我们都定义的 main方法都被标记了 static修饰符,那到底是什么意思?下面我们来看看 静态字段 如果将一个字段定义为 static,每个类只有一个这样的字段。而对于非静态的实例字段,每个对象...
Java线程数过多解决之路——利用Arthas解决Jenkins线程数飙升问题
0. 背景 Jenkins是基于Java开发的一款持续集成工具,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。同时,Jenkins 提供了数量庞大的各种插 件,以满足用户对于持续集成相关...
Redis的Java客户端
Redis 的 Java 客户端 Jedis 优点:以 Redis 命令作为方法名称,学习成本低廉,简单且实用 缺点:Jedis 的实例是线程不安全的,在多线程的环境下需要基于线程池来使用 lettu...
Hexo 博客安装 Fluid 主题
一.主题 使用 hexo 推荐选择一款自己喜欢的主题,主题带有一些额外的功能适配,不需要自己去做,比如评论、友链、访问统计。可以浏览官方网站来选择自己喜欢的主题:https://hexo.io/the...