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的。
  • 相关阅读:
    桌面图标背景透明
    如何做好一个中小型企业计算机网络管理员
    打开IE8总是提示欢迎使用?怎样使它不提示?
    js 操作select和option,添加select列
    bios 被加密,怎么进入bios
    Foxmail自动收取新邮件
    代码片段
    提高生活幸福感的13个方法
    水晶报表的真实体验
    游标替代
  • 原文地址:https://www.cnblogs.com/faunjoe88/p/8119410.html
Copyright © 2011-2022 走看看