Java反射包下的Method类中的Invoke方法

简介: Java反射包下的Method类中的Invoke方法

Method的invoke方法

image.png

1 先校验AccessibleObject的override字段

  • 指示此对象是否覆盖语言级别的访问检查。初始化为“ false”
    字段,方法和构造方法都会使用此字段
  • 注意:为了安全起见,此字段在此反射包外部均不可见。
  • image.png
  • AccessibleObject是Method,Field,Constructor的父类

可调用

setAccessible

方法改变,如果设置为true,则表示可以忽略访问权限的限制,直接调用。

image.png

便利方法来设置accessible标志对象的数组具有单个安全检查(效率)。

首先,如果有安全管理器,它checkPermission方法被称为一个ReflectPermission(“suppressAccessChecks”)的许可。

甲SecurityException如果升高flag是true ,但任何输入的元件中的可访问性array可以不改变(例如,如果元素对象是Constructor对象的类Class )。 在这样一个SecurityException的情况下,对象的可访问性被设置为flag数组元素高达(但不包括),用于其中发生异常的元件; 元件以外(并包括)该元素的对发生异常的可接近不变。

2 false,访问权限校验

Reflection.quickCheckMemberAccess方法先检查是不是public的

image.png

如果不是再用Reflection.getCallerClass(1)方法获得到调用这个方法的Class,然后做是否有权限访问的校验,校验之后缓存一次,以便下次如果还是这个类来调用就不用去做校验了,直接用上次的结果

3 调用MethodAccessor的invoke方法

每个Method对象包含一个root对象

  • 用于共享MethodAccessors
    此分支结构//仅当前只有两个级别深度(即一个根Method和可能指向它的许多Method对象)
    如果此分支结构曾经包含循环,则可能会发生死锁
  • image.png
  • root对象里持有一个MethodAccessor对象

设置此Method对象的MethodAccessor和(递归)其根

image.png

获得的Method对象相当于一个root的镜像,所有这些Method对象共享root里的MethodAccessor对象(这个对象由ReflectionFactory方法生成,ReflectionFactory对象在Method类中是static final的由native方法实例化)。

image.png

ReflectionFactory生成MethodAccessor


如果noInflation的属性为true则直接返回MethodAccessorGenerator创建的一个MethodAccessor

否则返回DelegatingMethodAccessorImpl,并将他与一个NativeMethodAccessorImpl互相引用

但DelegatingMethodAccessorImpl执行invoke方法的时候又委托给NativeMethodAccessorImpl了

DelegatingMethodAccessorImpl

DelegatingMethodAccessorImpl 类对象就是一个代理对象,主要负责调用被代理对象 delegate 的 invoke() 方法

image.png

var1 就是控制器类

var2 就是 req 和 resp

目录
相关文章
|
3天前
|
Java
【专栏】Java中的反射机制与应用实例
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
|
23小时前
|
IDE Java 开发工具
基于Java程序设计的实验教学方法优化与实践
基于Java程序设计的实验教学方法优化与实践
7 1
|
1天前
|
Java
Java对象和类研究
Java对象和类研究
6 0
|
1天前
|
XML Java 测试技术
Java异常处理神器:Guava Throwables类概念与实战
【4月更文挑战第29天】在Java开发中,异常处理是保证程序稳定性和可靠性的关键。Google的Guava库提供了一个强大的工具类Throwables,用于简化和增强异常处理。本篇博客将探讨Throwables类的核心功能及其在实战中的应用。
7 2
|
1天前
|
存储 安全 Java
【Java EE】CAS原理和实现以及JUC中常见的类的使用
【Java EE】CAS原理和实现以及JUC中常见的类的使用
|
3天前
|
存储 Java 索引
【JAVA】HashMap的put()方法执行流程
【JAVA】HashMap的put()方法执行流程
|
3天前
|
设计模式 Java Spring
来聊聊Java的反射机制(下)
来聊聊Java的反射机制(下)
7 0
|
5天前
|
人工智能 安全 Java
Java8 - LocalDateTime时间日期类使用详解
Java8 - LocalDateTime时间日期类使用详解
|
5天前
|
Java
Java 与垃圾回收有关的方法
Java 与垃圾回收有关的方法
|
6天前
|
Java
Java 反射
Java 反射