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

微服务中组件扫描(ComponentScan)的工作原理

微服务中组件扫描(ComponentScan)的工作原理

你的问题涉及到Spring框架中@ComponentScan的工作原理以及Maven依赖管理的影响。我来解释为什么能够扫描到common模块的bean而扫描不到其他模块的bean。

根本原因

关键在于**类路径(Classpath)**的包含情况:

  1. Maven依赖的模块会被包含在最终的类路径中
  2. 未通过Maven依赖的模块不会被包含在类路径中

详细解释

对于common模块

  1. 当你通过Maven引入了common模块依赖:

    <dependency><groupId>com.csuft</groupId><artifactId>common</artifactId><version>1.0.0</version>
    </dependency>
    
  2. Maven会将该模块的编译输出(通常是jar包)包含在你的应用类路径中

  3. @ComponentScan("com.csuft")工作时:

    • Spring会扫描类路径下所有com.csuft包及其子包
    • 因为common模块的类在类路径中,所以能够扫描到其中的@Component@Service等注解的类

对于其他未引入的模块

  1. 这些模块没有被声明为Maven依赖
  2. 它们的类文件不会被包含在最终的类路径中
  3. 即使这些模块中有com.csuft包下的组件:
    • Spring在扫描时根本找不到这些类文件
    • 因此无法注册这些bean

解决方案

要让Spring能够扫描到其他模块的bean,你需要:

  1. 确保模块被正确依赖

    <dependency><groupId>com.csuft</groupId><artifactId>other-module</artifactId><version>1.0.0</version>
    </dependency>
    
  2. 或者将这些模块的类路径显式包含

    • 在IDE中手动添加模块到类路径
    • 在构建配置中显式包含这些模块
  3. 考虑模块化设计

    • 如果某些bean需要在多个模块间共享,考虑将它们放在common模块中
    • 或者为跨模块bean创建专门的共享模块

总结

@ComponentScan只能扫描类路径中存在的包和类。Maven依赖是控制哪些模块会被包含在类路径中的主要机制,因此只有被正确依赖的模块中的组件才会被扫描到。

相关文章:

  • 【黑马JavaWeb+AI知识梳理】后端Web基础02 - Web基础
  • 单片机-STM32部分:1、STM32介绍
  • 【C++】认识map和set
  • Vue3源码学习4-effect中为什么使用WeakMap,Set?
  • 深入理解 MyBatis 代理机制
  • 数据结构6 · BinaryTree二叉树模板
  • 【51单片机8位数码管动态显示、右向左流水显示】2022-4-16
  • OpenHarmony - 驱动使用指南,HDF驱动开发流程
  • C++11新特性_标准库_std::array
  • 51c嵌入式~电路~合集4
  • 《AI大模型应知应会100篇》第44篇:大模型API调用最佳实践(附完整代码模板)
  • 计算机基础:二进制基础16,八进制加法
  • 虚拟局域网(VLAN)实验(Cisco Packet Tracer)-路由器、交换机的基本配置
  • 关于CSDN创作的常用模板内容
  • 从括号匹配看栈:数据结构入门的实战与原理
  • CSS 架构与命名规范
  • HTTPS协议:更安全的HTTP
  • 基于深度学习的毒蘑菇检测
  • [android]MT6835 Android 关闭selinux方法
  • Cesium 环境搭建
  • 释新闻|新加坡大选今日投票:除了黄循财首次挂帅,还有哪些看点
  • 哈马斯:愿与以色列达成为期5年的停火协议
  • 谢震业领衔挑战世界顶尖高手,这场长三角田径钻石赛值得期待
  • 上海环球马术冠军赛开赛,一场体育与假日消费联动的狂欢
  • 挑大梁!一季度北上广等7省份进出口占外贸总值四分之三
  • 国铁集团去年收入12830亿元增3%,全年铁路运输利润总额创新高