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()
相关推荐
郝学胜_神的一滴16 分钟前
C++20 高级编程 001:从极简HelloWorld到现代类型体系全梳理
c++·后端
卷无止境16 分钟前
FastAPI中间件全解析:请求处理链条上的隐形关卡
后端·python·fastapi
badhope19 分钟前
MCP协议:号称要统一AI工具调用,但大多数人连第一步都走不对
后端·架构
思考着亮24 分钟前
2. Redis 缓存实战
后端
晚安code24 分钟前
Java 并发编程必会的 JUC 辅助类:从 Callable 到阻塞队列
后端
叱咤月海鱼鱼猫26 分钟前
后端生成图片传递到前端
后端
长栎27 分钟前
你写的 AI 品控规则三个月就过期——不是规则错了,是你没给它做"回归测试"
后端
沙湖遇雨28 分钟前
7.EventLoop 生命周期
后端
雨落倾城夏未凉31 分钟前
halcon核心-模板匹配定位(二)
后端
ma_king32 分钟前
Spring Boot 接入飞书自定义机器人
java·后端