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
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


