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

一次 Spring 扫描 @Component 注解修饰的类坑

问题现象

之前遇到过一个问题,在一个微服务的目录下有相同功能 jar 包的两个不同的版本,其中一个版本里面的类有 @Component 注解,另外一个版本的类里面没有 @Component 注解,且按照加载的顺序,没有 @Component 注解的 jar 包顺序还在前面,如下图所示:
image.png
image.png

image.png
image.png

按照类加载的顺序来说,只会加载没有 @Component 注解的类,如下图所示:
image.png

但是实际上发现 Spring 还是基于这个类创建了 Bean如下图所示:
image.png

为啥加载的类明明没有注解,但是 Spring 为什么还是创建了这个类的 Bean?初步猜测 Spring 不是通过读取已加载的类是否有 @Component 注解来判断是否要创建 Bean的。

源码剖析

Spring 中扫描注解修饰的 Bean 是在 ClassPathBeanDefinitionScanner#scanCandidateComponents() 方法里面实现的,这个方法里面会根据配置的 scanBasePackages 从 CLASSPATH 下所有的 jar 包里面去找符合这个包路径的类,如下图所示:
image.png
image.png
image.png
然后读取这些 Class 文件的内容,判断它们是否有 @Component 注解,如果有后续就会创建一个对应的 Bean。
image.png
image.png

相关文章:

  • 什么是数据挖掘?初学者指南
  • 基于python+django+vue的电影数据分析及可视化系统
  • 瓶子类型检测系统源码分享
  • 第十四届蓝桥杯真题Java c组A.求和(持续更新)
  • unity CustomEditor的基本使用
  • 基于php的助农生鲜销售系统
  • Transformers 引擎,vLLM 引擎,Llama.cpp 引擎,SGLang 引擎,MLX 引擎
  • 选择租用徐州服务器机柜的作用有哪些?
  • 大模型辅助需求代码开发:如何提升核心编码任务生成效果
  • C语言编译器(C语言编程软件)完全攻略(包含所有平台)
  • 【分布式微服务云原生】详细介绍下dubbo和springcloud所能支持的微服务特性,为啥能支持的技术原理,以及适用的业务场景,并对两者各方面做个详细的比较
  • Linux基础命令mkdir详解
  • 在CentOS 6上安装BIND DNS服务器的方法
  • 一份冗长的文字
  • Rust赋能前端:为WebAssembly 瘦身
  • 分享一款快速APP功能测试工具
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • download使用浅析
  • Java 最常见的 200+ 面试题:面试必备
  • JSONP原理
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • SQLServer之索引简介
  • webgl (原生)基础入门指南【一】
  • 百度小程序遇到的问题
  • 闭包--闭包作用之保存(一)
  • 构建工具 - 收藏集 - 掘金
  • 关于for循环的简单归纳
  • 使用docker-compose进行多节点部署
  • 我是如何设计 Upload 上传组件的
  • 协程
  • Hibernate主键生成策略及选择
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #git 撤消对文件的更改
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $.ajax,axios,fetch三种ajax请求的区别
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (+4)2.2UML建模图
  • (003)SlickEdit Unity的补全
  • (1)Nginx简介和安装教程
  • (11)iptables-仅开放指定ip访问指定端口
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (poj1.2.1)1970(筛选法模拟)
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (小白学Java)Java简介和基本配置
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)Oracle存储过程编写经验和优化措施
  • (自用)交互协议设计——protobuf序列化
  • .NET C# 使用GDAL读取FileGDB要素类
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET+WPF 桌面快速启动工具 GeekDesk
  • .NET开源快速、强大、免费的电子表格组件