关于Class.getResource和ClassLoader.getResource的路径问题
Class.getResource(String path)
- path不以'/'开头时,默认是从此类所在的包下取资源;
- path以'/'开头时,则是从项目的ClassPath根下获取资源。在这里'/'表示ClassPath
JDK设置这样的规则,是很好理解的,
- path不以'/'开头时,我们就能获取与当前类所在的路径相同的资源文件
- 以'/'开头时可以获取ClassPath根下任意路径的资源
Class.getClassLoader().getResource(String path)
- 以'/'开头时,path是指类加载器的加载范围,在资源加载的过程中,使用的逐级向上委托的形式加载的,'/'表示Boot ClassLoader中的加载范围,因为这个类加载器是C++实现的,所以加载范围为null
- 不以'/'开头时,getClassLoader().getResource(""),可以获取ClassPath根下任意路径的资源
从上面可以看出:
class.getResource("/") == class.getClassLoader().getResource("")