首页 > 其他分享 >Reflection.getCallerClass()

Reflection.getCallerClass()

时间:2024-08-14 15:50:01浏览次数:8  
标签:反射 调用 Reflection CallerSensitive getCallerClass 方法

最近在看jdbc源码时,在DriverManager中的getConnection方法中见到了Reflection.getCallerClass()方法,尝试看了看源码。

源代码如下
 /** Returns the class of the caller of the method calling this method,
        ignoring frames associated with java.lang.reflect.Method.invoke()
        and its implementation. */
    @CallerSensitive
    @IntrinsicCandidate
    public static native Class<?> getCallerClass();

注释的关键部分含义为返回调用该方法的方法的调用者的类,绕口的很。
再看一下两个注解:

@CallerSensitive
@IntrinsicCandidate
CallerSensitive注解:


在 Java 中,@CallerSensitive 注解用于标记那些对调用者敏感的方法。通俗的讲,这些方法的逻辑可能会依赖于谁调用了它。比如,某些方法可能会根据调用者的类来改变其行为、权限或返回值。
关于该方法的作用,简单来说,方便跳过反射相关的一些方法,从而找到真正发起反射请求的类,从而解决通过反射导致的安全漏洞
具体可参考:https://blog.csdn.net/HEL_WOR/article/details/50199797

IntrinsicCandidate

标记某些方法可以被编译器优化为内在(intrinsic)操作

总结

所以Reflection.getCallerClass()方法的作用为:获取到调用该方法的源头类的Class,也就是说你可能通过多次反射调用了一个方法,该方法可以帮助找到调用该方法的源头类。
参考示例
该方法的常见应用即,当我们查看报错日志,如NullPointException,我们可以看到具体在哪个类多少行调用出错的,就是使用了该方法配合反射得到。
参考链接:https://juejin.cn/post/6904563648233766920

标签:反射,调用,Reflection,CallerSensitive,getCallerClass,方法
From: https://www.cnblogs.com/bbban/p/18359127

相关文章

  • JAVA报错:Caused by: java.lang.NoSuchFieldError: REFLECTION
     Causedby:java.lang.NoSuchFieldError:REFLECTIONatcom.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.<init>(RuntimeModelBuilder.java:93)atcom.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:473)atcom......
  • C# 通过反射(Reflection)调用不同名泛型方法
    概述由于工作需要,需要通过数据类型和方法名控制方法走向用到的数据类型有8种(string,Int16,Int32,Int64,Boolean,Byte,Single,Double)读取的方法(参数一致,但是数据不同的泛型方法,返回值也是泛型)暂时只有11种,但肯定的是,后续一定会增加原本计划排列组合,写个88行代码,但是总觉得重复......
  • 光的反射与反射率 Reflection of Light and Reflectance/Reflectivity
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录光的反射ReflectionofLight一、光的反射ReflectionofLight二、反射的分类1.漫反射diffusereflection朗伯反射(Lambertianreflectance)关联概念参考文献2.镜面反射mirrorreflection3.回......
  • 什么是C#反射(Reflection)
    一、什么是C#反射(Reflection)定义:属性提供了一种将元数据或声明性信息与代码(程序集、类型、方法、属性等)关联的强大方法。当一个属性与一个程序实体相关联后,可以使用一种叫做 反射反射是C#提供的一种强大机制,‌它允许在程序运行时获取关于程序集、‌类型和成员的信息,‌并......
  • 推导2维镜像变换(Reflection Transform)的公式
    我们知道2维的旋转变换公式为Q=(......
  • GRPC - Debugging: Server Reflection
      ......
  • Go - Using Reflection
    Reflectioncanbeusedtoinspectthetypeofvariablesandtodynamicallyaccessandmodifytheirvalues.Followingisasimpleexampleofusingreflectiontoinspectavariable'stype: funcmain(){v1:=42inspectVariable(v1)v2:......
  • Caused by: org.apache.ibatis.reflection.ReflectionException: Error parsing prope
    问题描述1、编译过程是不会被发现的;2、运行时报错:Causedby:org.apache.ibatis.reflection.ReflectionException:Errorparsingpropertyname'lambda$pages$4d14352e$1'.Didn'tstartwith'is','get'or'set'。问题分析MyBatis-Plus的条件构造器常用......
  • C# NPOI reflection import data into excel file
    usingSystem.ComponentModel.DataAnnotations;usingSystem.Diagnostics;usingSystem.Runtime.CompilerServices;usingSystem.Security.Cryptography;usingSystem.Text;usingNewtonsoft.Json;usingSystem.Reflection;usingNPOI.SS.Formula.Functions;usingNPO......
  • Runtime Reflection
    参考:1. AFlexibleReflectionSysteminC++:Part1(preshing.com)2. C++Reflection|AustinBrunkhorst 2做的更好。反射的代码是自动生成的。目的为了学习这个理念,先是从0感受一个最简单的实现:假设:structNode{std::stringkey;intvalue;}可以......