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()
相关推荐
桦说编程20 分钟前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研23 分钟前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi1 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
甄超锋2 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
阿华的代码王国2 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy2 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
AntBlack2 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
bobz9653 小时前
pip install 已经不再安全
后端
寻月隐君3 小时前
硬核实战:从零到一,用 Rust 和 Axum 构建高性能聊天服务后端
后端·rust·github
Java小白程序员5 小时前
Spring Framework:Java 开发的基石与 Spring 生态的起点
java·数据库·spring