classpath与classpath*实现逻辑

前言

在spring项目中经常会出现classpath与classpath*的配置,我们知道classpath指会加载当前项目下的配置,classpath*会加载当前项目和依赖项目中的配置

今天我们来看一下底层代码,看看是如何实现的

作用

首先我们要知道classpath与classpath*起作用的点在哪里,当spring进行beanDefiniti注册的时候,会通过Resource对象获取配置文件的输入流。

classpath与classpath*的作用就在于创建Resource对象的时候,如果使用classpath那么只会加载当前项目下的指定的配置文件,如果使用classpath*那么会加载当前和所依赖的项目下的指定的配置文件。

所以我们找一下创建Resource对象和同过Resourc对象获取输入流的代码,就可以知道其作用与原理了。

代码截图

我们拿ClassPathXmlApplicationContext来举例

java 复制代码
ClassPathXmlApplicationContext context = new MyXmlApplication("classpath:application.xml");

这里会判断是否以classpath*为前缀

前缀为classpath

获取输入流的具体实现

前缀为classpath*

总结

classpath*为前缀时会通过classloader.getResources()方法获取项目下的所有符合名称的配置文件,转换为UrlResource对象。

classpath为前缀时会将路径封装成一个ClassPathResource对象,在获取输入流时使用classLoader.getResourceAsStream()获取当前项目下的配置文件的输入流

知识点在于以下几个方法

java 复制代码
classLoader.getResourceAsStream()
classLoader.getResources()
classLoader.getResource()
相关推荐
葫芦和十三12 小时前
图解 MongoDB 19|Oplog:复制的真正载体,不是文档是操作
后端·mongodb·agent
葫芦和十三12 小时前
图解 MongoDB 20|复制延迟与 catch up:Secondary 为什么跟不上
后端·mongodb·agent
IT_陈寒17 小时前
SpringBoot自动配置的坑,我的API突然就404了
前端·人工智能·后端
ServBay18 小时前
为什么说 MCP 是 2026 年开发者必须掌握的黄金协议?
后端·mcp
程序员夏洛18 小时前
Spring Boot 多模块项目中 IDEA 提示 Cannot resolve symbol 的一次排查记录
后端
子兮曰18 小时前
OpenMontage 深度解剖:你的 AI 编程助手,其实是个视频工作室
前端·后端·ai编程
子兮曰18 小时前
前端工具链的「Rust 化」:一场没有赢家的军备竞赛?
前端·后端·rust
爱勇宝19 小时前
从 Ctrl+CV 到 Enter:程序员正在失去什么
前端·后端·程序员
码事漫谈20 小时前
EdgeOne Makers + WorkBuddy:零基础也能快速搭建可上线的 AI 智能体(附图文教程)
后端