深入理解Java中的反射机制和使用原理!详细解析invoke方法的执行和使用 (8)

@CallerSensitive注解

Summary: Improve the security of the JDK’s method-handle implementation by replacing the existing hand-maintained list of caller-sensitive methods with a mechanism that accurately identifies such methods and allows their callers to be discovered reliably. /** * A method annotated @CallerSensitive is sensitive to its calling class, * via {@link sun.reflect.Reflection#getCallerClass Reflection.getCallerClass}, * or via some equivalent. * * @author John R. Rose */ @Retention(RetentionPolicy.RUNTIME) @Target({METHOD}) public @interface CallerSensitive { }

@CallerSensitive注解修饰的方法从一开始就知道具体调用此方法的对象

不用再经过一系列的检查就能确定具体调用此方法的对象

实际上是调用sun.reflect.Reflection.getCallerClass方法

Reflection类位于调用栈中的0帧位置

sun.reflect.Reflection.getCallerClass() 方法返回调用栈中从0帧开始的第x帧中的类实例

该方法提供的机制可用于确定调用者类,从而实现"感知调用者(Caller Sensitive)"的行为

即允许应用程序根据调用类或调用栈中的其它类来改变其自身的行为

反射注意点

反射会额外消耗系统资源,如果不需要动态地创建一个对象,就不要使用反射

反射调用方法时可以忽略权限检查.可能会破坏封装性而导致安全问题

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydsyj.html