getResource()和getSystemResource()分析
来源:互联网 发布:python 函数定义和调用 编辑:程序博客网 时间:2024/06/03 17:39
1. getClass().getResource()
第一步,
getClass().getResource(path)
是有一个路径参数的,这个路径会先被转换成"类所在的包名称+path",举个例子,当调用com.test.A.class.getResource(“config.properties”)
时,最终这个path会被转换为"com\test\config.properties"。
第二步,便会调用类的类加载器对象的getResource()方法,继续上面的例子,也就是等于:
com.test.A.class.getClassLoader().getResource("com\test\config.properties")
(为了方便A类的类加载其对象简称cl)。
第三步,分析
cl.getResource()
发现,此方法会返回cl的"第一条匹配到记录的加载路径+path"的URL对象。举个例子,cl类加载器的加载路径是"\home\aaa"和"\home\bbb",而config.properties在\home\bbb下面,那么cl.getResource("com\test\config.properties")
返回的URL就是"\home\bbb\com\test\config.properties",注意,这个寻找的过程也是符合双亲委托机制的。如果父类的加载路径中存在匹配项,那么返回的便是父类中的匹配路径。(此方法中核心部分是要被子类来覆盖的,所以此处说的是URLClassLoader中的实现)
2. ClssLoader.getSystemResource()
ClssLoader.getSystemResource(path)
更简单,它等价getSystemClassLoader().getResource(path)
,衔接上面的第三步。
3. 总结
也就是说,不管是类对象的getResource()还是类加载器的getSystemResouce(),都是走的类加载器的getResource(),类加载器会搜索自己的加载路径来匹配寻找项。而最常用的类加载器就是AppClassLoader,又因为APPClassLoader的加载路径是classpath,所以网上文章一般都会说getClass().getResouce()是返回classpath,这是不够准确的。
- getResource()和getSystemResource()分析
- Class.getResource()、ClassLoader.getResource()、ClassLoader.getSystemResource()区别
- java Class.getResource和ClassLoader.getResource的区别分析
- Class.getResource和ClassLoader.getResource的区别分析
- Class.getResource和ClassLoader.getResource区别与分析
- Class.getResource和ClassLoader.getResource的区别分析
- Class.getResource和ClassLoader.getResource的区别分析
- Class.getResource和ClassLoader.getResource的区别分析
- Class.getResource和ClassLoader.getResource的区别分析及用法
- Class.getResource和ClassLoader.getResource的区别分析
- getResource("")和getClassLoader().getResource("")
- Class.getResource和ClassLoader.getResource
- Class.getResource和ClassLoader.getResource
- Class.getResource和ClassLoader.getResource
- Class#getResource与ClassLoader#getResource分析
- Class.getResource() 和 ClassLoader.getResource() 的区别
- java Class.getResource和ClassLoader.getResource
- java Class.getResource和ClassLoader.getResource
- 文章标题
- Unity Steam_VR VRTK开发插件自带案例详解(一)
- Java可视操作界面例子
- 开始我的python学习之路
- GIT使用
- getResource()和getSystemResource()分析
- 无限轮播
- Button绘制圆角,蓝边
- 第一个只出现一次的字符
- Windows 7 64bit下Python以及numpy、Scipy库的安装
- Qt5项目在windows环境下发布所需依赖库
- Prime Test POJ
- 一份直接去外网下载依赖包的pom文件,pom.xml
- Oracle配置--当多个服务器上的数据库实例同名时