zoukankan      html  css  js  c++  java
  • GetClassLoader和GetCallerClass的使用

    GetClassLoader是JAVA中用来得到ClassLoader的

    JAVA中有以下几种ClassLoader. 

     1.  Bootstrap ClassLoader - GetClassLoader的返回值为Null,是JVM的C++源码, Ext ClassLoader 的Parent

    主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作

     2   System ClassLoader -  GetClassLoader返回值为SystemClassLoader.

    主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作

     3.  Ext ClassLoader  - 是AppClassLoader 的Parent 返回Ext ClassLoader  

    主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作。

     4.  App ClassLoader - 返回AppClassLoader

    主要负责加载用户类。 

     5.  Customer Class Loader  - 一般都继承App ClassLoader 

    用户自定义。

    GetCallerClass是Sun.Reflector包下Reflection类的方法 

    定义为GetCallerClass(int level)

    0  -   返回 Reflection类

    1  -   返回调用GetCallerClass的类,比如  Class Test{void test(){Class cs = Reflection.GetCallerClass(1)}}, 返回Test.

    2  -    返回再上层的类, 如Class Main{new Test().test()}, GetCallerClass(2) 则返回Main. 

    3. 4. ....层层上传。

    两个函数结合可以使用加载安全,如

    void security()
    {
          Class cs = Reflection.GetCallerClass(2);     
          if(cs.GetClassLoader()!= null)
               throw new SecurityException("Only java core can calll this function")
    }
    Reflection.getCallerClass() 是取得调用类,这个方法是native的。
  • 相关阅读:
    POI Excel表格合并,边框设置
    MYSQL中group_concat有长度限制!默认1024(转载)
    MARQUEE 字符滚动条效果
    <A>标签电子邮件链接
    <A>标签锚标记
    <hr> 水平样式分隔线
    sudo gem install cocoapods 没反应问题
    适配iPhone6和iPhone6 Plus
    同步推是如何给未越狱的IOS设备安装任意IPA的?
    据说是百度ios面试题
  • 原文地址:https://www.cnblogs.com/faunjoe88/p/8119410.html
Copyright © 2011-2022 走看看