GetClassLoader和GetCallerClass的示例分享
下文笔者讲述GetClassLoader和GetCallerClass的用法简介说明,如下所示
GetClassLoader的功能说明
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简介
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. ....层层上传
GetClassLoader和GetCallerClass的使用示例
两个函数结合可以使用加载安全 void security() { Class cs = Reflection.GetCallerClass(2); if(cs.GetClassLoader()!= null) throw new SecurityException("Only java core can calll this function") } Reflection.getCallerClass()取得调用类,此方法是native
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。