概述
具体的理解请参考:https://blog.csdn.net/HEL_WOR/article/details/50199797。
下面是我自己的理解:下面就是Class.forName的定义,学过java的应该都用过这个方法。
@CallerSensitive
public static Class<?> forName(String className)
throws ClassNotFoundException {
Class<?> caller = Reflection.getCallerClass();
return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
}
进入Reflection中:发现getCallerClass是个native方法,并且被CallerSensitive注解
@CallerSensitive
public static native Class<?> getCallerClass();
继续查找srcsharenativesunreflectReflection.c。
#include "jvm.h"
#include "sun_reflect_Reflection.h"
JNIEXPORT jclass JNICALL Java_sun_reflect_Reflection_getCallerClass__
(JNIEnv *env, jclass unused)
{
return JVM_GetCallerClass(env, JVM_CALLER_DEPTH);
}
JNIEXPORT jclass JNICALL Java_sun_reflect_Reflection_getCallerClass__I
(JNIEnv *env, jclass unused, jint depth)
{
return JVM_GetCallerClass(env, depth);
}
看到JVM_CALLER_DEPTH应该就是上面博客提到的"固定深度",JVM_GetCallerClass这个方法是定义在jvm中,没有找到源代码,不过在jdk的安装目录:Javajdk1.8.0_25lib下面找到jvm.lib,使用nm命令查看:
在jvm.dll定义:
最后
以上就是友好发卡为你收集整理的@CallerSensitive注解的全部内容,希望文章能够帮你解决@CallerSensitive注解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复