Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为什么 ClassLoader 类的 getResource(String name) 方法能够读取到原本在 src/main/resources 里面的文件?

为什么 ClassLoader 类的 getResource(String name) 方法能够读取到原本在 src/main/resources 里面的文件?

作者头像
訾博ZiBo
发布于 2025-01-06 12:25:44
发布于 2025-01-06 12:25:44
1100
举报

为什么 ClassLoader 类的 getResource(String name) 方法能够读取到原本在 src/main/resources 里面的文件?

Java 开发中,ClassLoader 类是一个关键的组件,用于加载类和资源。其中,getResource(String name) 方法允许我们在类路径中查找指定名称的资源文件。一个常见的疑问是:为什么这个方法能够轻松地读取到Maven项目中src/main/resources目录下的文件呢?

1、类路径和资源文件

在Maven项目中,源代码通常存放在src/main/java目录下,而资源文件则存放在src/main/resources目录下。这样的组织结构是为了在构建过程中能够清晰地分离代码和资源。

在编译时,Maven将src/main/resources目录下的文件复制到类路径中,通常是target/classes目录。这意味着编译后,资源文件就变成了类路径的一部分。

2、ClassLoader 的层次结构

ClassLoader 类的设计支持层次结构,其中每个类加载器都有一个父类加载器。当类加载器需要加载类或资源时,它首先会尝试从父加载器中查找,然后再从自身的类路径中查找。

这机制为ClassLoader提供了一种委托机制,确保资源的查找是层次化的,逐级向上寻找,直至找到为止。

3、getResource 方法的工作原理

ClassLoadergetResource(String name) 方法实际上是利用了这一层次结构的委托机制。它首先尝试调用父加载器getResource 方法,如果父加载器找不到资源,再从自己的类路径中查找。这保证了在整个类加载器层次结构中,资源文件可以被有效地定位。

因此,当我们使用ClassLoadergetResource 方法时,它会顺着类加载器的层次结构,最终在编译后的类路径中找到src/main/resources目录下的文件。

4、使用 ClassLoader 类图示

image-20231121222446332
image-20231121222446332

5、仅使用 FileInputStream (不推荐,也不合理)

该路径是相对路径,并且是相对于项目的根目录的。 这么写是不合理的!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Django小技巧14: messages 框架
让用户知道应用程序发生了什么, 是个极好的用户体验。让应用程序和用户之间能够有个很好的『交流』是个不错的选择。
用户1416054
2018/12/06
9890
基于django的视频点播网站开发-step6-个人中心功能
从本讲起,我们开始个人中心功能的开发。个人中心里面包括个人资料、修改密码、订阅设置、意见反馈这四部分。通过这部分的开发,我们将会接触到更多django的用法。
西门吹雪1997
2019/02/26
1.2K0
使用django-allauth管理用户登录与注册
 django-allauth 是非常受欢迎的管理用户登录与注册的第三方 Django 安装包,django-allauth 集成了 local 用户系统 和 social 用户系统,其 social 用户系统 可以挂载多个账户。 django-allauth 能实现以下核心功能:
菲宇
2019/06/13
7K0
django 1.8 官方文档翻译:13-1-2 使用Django认证系统
这篇文档解释默认配置下Django认证系统的使用。这些配置已经逐步可以满足大部分常见项目对的需要,可以处理范围非常广泛的任务,且具有一套细致的密码和权限实现。对于需要与默认配置不同需求的项目,Django支持扩展和自定义认证。
ApacheCN_飞龙
2022/11/27
4.8K0
Django实战-信息资讯-登录验证
Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2019/07/18
7130
Django实战-信息资讯-登录验证
Django小技巧10: 自定义认证策略
Django 内置了一套功能极全的认证系统,而且可以很容易的进行自定义, 本章的内容就是自定义认证策略。
用户1416054
2018/11/29
7480
Django小技巧10: 自定义认证策略
【云+社区年度征文】Django认证系统并不鸡肋反而很重要
在使用django-admin startproject创建项目后,Django就默认安装了一个采用session实现的认证系统。这是Django相比于其他框架的一大特点:自带认证系统,开箱即用。有人说它方便,有人说它鸡肋,但它作为Django的重要组成部分,学习它有助于我们理解Django框架的核心技术。
dongfanger
2020/12/11
1.7K0
【云+社区年度征文】Django认证系统并不鸡肋反而很重要
一个完整的Django入门指南(二)
第三部分 Introduction        In this tutorial, we are going to dive deep into two fundamental concepts: URLs and Forms. In the process, we are going to explore many other concepts like creating reusable templates and installing third-party libraries. We are a
zhang_derek
2018/04/11
3.3K0
一个完整的Django入门指南(二)
Django实战篇-论坛注册视图
在 signup 函数中,先是判断是 POST 请求还是 GET 请求。因为登录是需要传递数据,所以为 POST 请求,接下来就是实例化注册的验证表单 SignUpForm(),将 request.POST 写入,是为了将前端传来的数据转成 form 表单。
小团子
2019/07/18
8540
Python Django开发 经验技巧总结(一)
该功能运用了django.contrib.messages这个库,在django项目中setting.py文件中APP注册部分自定义注册
cutercorley
2020/07/23
1.4K0
Django2.0中文(会话、用户、注册)
//cookie不安全 1、读写cookie: request.COOKIES def show_color(request): if "favorite_color" in request.COOKIES: return HttpResponse("Your favorite color is %s" % request.COOKIES["favorite_color"]) else: return HttpResponse("You don't have a favorite color.")
用户5760343
2022/05/14
5270
Django2.0中文(会话、用户、注册)
Django小技巧15: 使用基于类视图的Mixins
依类似的方式, 你可以在UpdateView中, 重用相同的FormMessageMixin, 并覆盖默认的form_invalid_message方法.
用户1416054
2018/12/06
1.1K0
Django小技巧15: 使用基于类视图的Mixins
Python进阶35-Django Auth组件
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
5830
Python进阶35-Django Auth组件
Django中拓展用户模型
本文基于上一篇文章的基础上进行修改Django中allauth的安装与基本使用
Hsinyan
2022/06/19
1.1K0
Django中拓展用户模型
Django模板中使用消息message框架
在web应用程序中,通常需要在处理表单或其他类型的用户输入之后向用户显示一次性通知消息(也称为“flash message”)。
菲宇
2019/06/13
3K0
Django模板中使用消息message框架
【Django | allauth】useprofile 用户模型扩展
在allauth 包中复制粘贴templates 的account包到该项目的templates的account下,原因:
计算机魔术师
2022/08/16
1.2K0
【Django | allauth】useprofile 用户模型扩展
还没账户的小伙伴 速速点击链接跳转牛客网登录注册 开始刷爆题库,速速通关面试吧🙋‍♂️
计算机魔术师
2023/11/20
2690
15.Django基础十一之认证系统
  我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。
changxin7
2019/12/12
2.2K0
Python进阶26-Django 视图层
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
2K0
Python进阶26-Django 视图层
被解放的姜戈06 假作真时
之前了解了: 创建Django项目 数据库 模板 表格提交 admin管理页面 上面的功能模块允许我们做出一个具有互动性的站点,但无法验证用户的身份。我们这次了解用户验证部分。通过用户验证,我们可以根据用户的身份,提供不同的服务。 一个Web应用的用户验证是它的基本组成部分。我们在使用一个应用时,总是从“登录”开始,到“登出”结束。另一方面,用户验证又和网站安全、数据库安全息息相关。HTTP协议是无状态的,但我们可以利用储存在客户端的cookie或者储存在服务器的session来记录用户的访问。  Djan
Vamei
2018/01/18
1.3K0
被解放的姜戈06 假作真时
推荐阅读
相关推荐
Django小技巧14: messages 框架
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档