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()
相关推荐
是发财不是旺财19 分钟前
跟着deepseek学golang--认识golang
开发语言·后端·golang
我的golang之路果然有问题19 分钟前
快速上手GO的net/http包,个人学习笔记
笔记·后端·学习·http·golang·go·net
Apifox.21 分钟前
Apifox 4月更新|Apifox在线文档支持LLMs.txt、评论支持使用@提及成员、支持为团队配置「IP 允许访问名单」
前端·人工智能·后端·ai·ai编程
BXCQ_xuan1 小时前
基于Node.js的健身会员管理系统的后端开发实践
后端·mysql·node.js
拉满buff搞代码2 小时前
搞定 PDF“膨胀”难题:Python + Java 的超实用压缩秘籍
后端
FAQEW2 小时前
Spring boot 中的IOC容器对Bean的管理
java·spring boot·后端·bean·ioc容器
<<2 小时前
基于Django的权限管理平台
后端·python·django
林夕11202 小时前
颠覆认知的MySQL全解析:安装、连接到SQL三大核心语句全掌握
后端·mysql
Java中文社群3 小时前
最火向量数据库Milvus安装使用一条龙!
java·人工智能·后端
JAVA百练成神3 小时前
深度理解spring——BeanFactory的实现
java·后端·spring