zoukankan      html  css  js  c++  java
  • getResource()和getSystemResource()分析

    1. getClass().getResource()

    第一步,getClass().getResource(path)是有一个路径参数的,这个路径会先被转换成"类所在的包名称+path",举个例子,当调用com.test.A.class.getResource(“config.properties”)时,最终这个path会被转换为"com estconfig.properties"。

    第二步,便会调用类的类加载器对象的getResource()方法,继续上面的例子,也就是等于:com.test.A.class.getClassLoader().getResource("com estconfig.properties")(为了方便A类的类加载其对象简称cl)。

    第三步,分析cl.getResource()发现,此方法会返回cl的"第一条匹配到记录的加载路径+path"的URL对象。举个例子,cl类加载器的加载路径是"homeaaa"和"homebb",而config.properties在homebb下面,那么cl.getResource("com estconfig.properties")返回的URL就是"homebbcom estconfig.properties",注意,这个寻找的过程也是符合双亲委托机制的。如果父类的加载路径中存在匹配项,那么返回的便是父类中的匹配路径。(此方法中核心部分是要被子类来覆盖的,所以此处说的是URLClassLoader中的实现)

    2. ClssLoader.getSystemResource()

    ClssLoader.getSystemResource(path)更简单,它等价getSystemClassLoader().getResource(path),衔接上面的第三步。

    3. 总结

    也就是说,不管是类对象的getResource()还是类加载器的getSystemResouce(),都是走的类加载器的getResource(),类加载器会搜索自己的加载路径来匹配寻找项。而最常用的类加载器就是AppClassLoader,又因为APPClassLoader的加载路径是classpath,所以网上文章一般都会说getClass().getResouce()是返回classpath,这是不够准确的。

  • 相关阅读:
    网络安全专家教你设置史上最安全的WiFi密码
    Python语言为什么被称为高级程序设计语言?
    常用组件
    小程序路由
    小程序的生命周期函数
    小程序案例-查询天气
    第一个小程序,获取用户名和用户头像
    小程序util.js的使用
    小程序文件夹目录分析 转
    特效 css3 渐变背景框
  • 原文地址:https://www.cnblogs.com/WreckBear/p/7423921.html
Copyright © 2011-2022 走看看