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

Springboot之类路径扫描

SpringBoot框架中默认提供的扫描类为:ClassPathBeanDefinitionScanner。 webFlux框架中借助RepositoryComponentProvider扫描符合条件的Repository。

public class ClassPathScanningCandidateComponentProvider{private final List<TypeFilter> includeFilters = new ArrayList<>();private final List<TypeFilter> excludeFilters = new ArrayList<>();public Set<BeanDefinition> findCandidateComponents(String basePackage) {//根据类路径扫描候选类return scanCandidateComponents(basePackage);}private Set<BeanDefinition> scanCandidateComponents(String basePackage) {Set<BeanDefinition> candidates = new LinkedHashSet<>();try {String packageSearchPath = "classpath*:" + resolveBasePackage(basePackage) + '/' + this.resourcePattern;Resource[] resources = getResourcePatternResolver().getResources(packageSearchPath);for (Resource resource : resources) {String filename = resource.getFilename();MetadataReader metadataReader = getMetadataReaderFactory().getMetadataReader(resource);if (isCandidateComponent(metadataReader)) {ScannedGenericBeanDefinition sbd = new ScannedGenericBeanDefinition(metadataReader);sbd.setSource(resource);if (isCandidateComponent(sbd)) {//候选类条件判断candidates.add(sbd);}}}}return candidates;}protected boolean isCandidateComponent(MetadataReader metadataReader) throws IOException {for (TypeFilter tf : this.excludeFilters) {if (tf.match(metadataReader, getMetadataReaderFactory())) {return false;}}for (TypeFilter tf : this.includeFilters) {if (tf.match(metadataReader, getMetadataReaderFactory())) {return isConditionMatch(metadataReader);}}return false;}
}

扫描路径提供:includeFilters & excludeFilters。

相关文章:

  • hadoop中创建MySQL新数据库数据表
  • mybatis中${}和#{}的区别
  • 【PmHub后端篇】PmHub中基于Redis加Lua脚本的计数器算法限流实现
  • 可视化图解算法38:重建二叉树
  • 在企业级智能体浪潮中,商业数据分析之王SAS或将王者归来
  • 数据挖掘入门-二手车交易价格预测
  • 鸿蒙北向应用开发: deveco5.0 创建开源鸿蒙项目
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(20):复习
  • 第五十七篇 Java接口设计之道:从咖啡机到智能家居的编程哲学
  • Kafka原理深度剖析
  • Spring Boot Swagger 安全防护全解析:从旧版实践到官方规范
  • 基于智能家居项目 解析DHT11温湿度传感器
  • C++23 views::zip 和 views::zip_transform (P2321R2) 深入解析
  • [传输层]TCP协议
  • Node.js 中的 URL 模块
  • 医疗系统开发架构和技术路线建议-湖南某三甲医院
  • 开源模型应用落地-qwen模型小试-Qwen3-8B-融合VLLM、MCP与Agent(七)
  • TikTok矩阵运营干货:从0到1打造爆款矩阵
  • WM_TIMER定时器消息优先级低,可能会被系统丢弃,导致定时任务无法正常执行
  • 论软件设计模式及其应用
  • 秦洪看盘|交易新逻辑,银行股成A股稳定器
  • 习近平举行仪式欢迎巴西总统卢拉访华
  • 继71路之后,上海中心城区将迎来第二条中运量公交
  • 新闻1+1丨婚姻登记服务,如何跑出幸福加速度?
  • 牧原股份子公司与养殖户种猪买卖纠纷案一审胜诉
  • 珠峰窗口期5月开启 普通人登一次有多烧钱?