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()
相关推荐
IT_陈寒6 分钟前
Java线程池用错参数,我的服务居然悄悄崩溃了
前端·人工智能·后端
光影少年18 分钟前
Express 中间件原理
后端·node.js·express
步行cgn39 分钟前
Spring p 命名空间注入详解
java·前端·spring
aramae1 小时前
MySQL内置函数(7)
开发语言·笔记·后端·mysql·其他
徐小夕2 小时前
存量.doc 文档怎么办?JitWord 开源转换库打通旧文档到在线协同全链路
后端·架构·github
ee又momo2 小时前
一次 JWT Token 过期续期的踩坑记录
后端
二月龙2 小时前
App 瘦身实战:图片、so 库、资源压缩,安装包体积减小 40%
后端
大勇前进2 小时前
Kotlin 协程实战避坑:90% 的人都会踩的生命周期泄漏问题
后端
苏三说技术3 小时前
Spring AI、LangChain4j、AgentScope、Embabel,哪个AI框架更好?
后端
烽学长3 小时前
(附源码)基于Springboot+vue的图书阅读分享系统的设计与实现
java·spring boot·后端