线程安全策略

Java45

本文基于图灵课堂周瑜老师的讲解整理,包括spring bean加载的过程,主要是扫描BeanDefinition以及初始化非懒加载单例Bean两部分,源码取自SpringFramework 5.3.22

1. Bean扫描

本小节介绍的是Spring从给定的扫描位置扫描到待加载的Bean,生成BeanDefinitionMap的过程

SpringBoot启动过程中使用的ApplicationContext是 AnnotationConfigApplicationContext,而它初始化的时候会顺带初始化两个 BeanDefinitionReaderAnnotatedBeanDefinitionReaderClassPathBeanDefinitionScanner,前者是可以直接通过给定的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
输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

Spider

流程: 迭代进行:种子url->Element遍历获取超链接lin->作为新种子id ⚠️注意频率和遍历深度 1.设定url及请求参数 headers = {"user-agen...
Java

西门子PLC数据读取 Observer设计模式

当我听到这个需求的时候,我差点爆粗口(实际上可能已经爆了,不过我忘了)。 需求刚开始是: C#连接PLC Modbus读取值。 我用C#写完了,觉得太简单了,还弄了个窗体。 接着是: 只读值。这太简单...
Java

Java通过socket和DTU,RTU连接工业传感器通信

现在做DTU传感器监测数据一块,给大家分享如何通过socket技术连接到DTU,并能和DTU下面的传感器通信的,分享一下自己的心得和体会。 总体架构图 先来看下整体网络结构图。 工业名称解释 传感器:...
Java

迭代器Iterator

迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃...
Java

SpringMVC转发和重定向区别!

在servlet中,转发和重定向是由request和response完成的。两者之间的区别请看我之前的文章。那么在springMVC中是如何完成的呢? /转发/ @RequestMapping("/l...
Java

方法(Java)

什么是方法? 基本介绍 在其他语言中也叫函数 System.out.println();类名.对象.方法; Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序集合 方法包...
Java

Spring Boot 操作 Redis

参考资料 说在前面 步骤 1. 新建 Maven 项目并引入 spring-boot-starter-data-redis 2. 编写 application.yml 3. 编写缓存服务和Contro...
Java

Springboot3.0+spring6.0+JDK17+配置jsp和打war包

由于某些缘故,公司的产品需要升级,但并不希望花费大量时间重写前端代码(原来的就不是前后分离的)。所以虽然spring和springboot都升级为最新的版本,但是依然还是需要支持jsp,并继续用打包为...
Java

Java 并发编程

基础知识 1. 为什么要使用并发编程 提升多核CPU的利用率:一般来说一台主机上的会有多个CPU核心,我们可以创建多个线程,理论 上讲操作系统可以将多个线程分配给不同的CPU去执行,每个CPU执行一个...
Java

内部类(Java)

基本介绍 概念:在一个类的内部再定义一个完整类 特点:编译后可以生成独立的字节码文件;内部类可以直接访问外部类的私有属性,而不破坏封装[En]Features: Independent bytecod...