Java反射包下的Method类中的Invoke方法
发布日期:2021-06-30 12:25:42
浏览次数:2
分类:技术文章
本文共 1521 字,大约阅读时间需要 5 分钟。
Method的invoke方法
1 先校验AccessibleObject的override字段
- 指示此对象是否覆盖语言级别的访问检查。初始化为“ false” 字段,方法和构造方法都会使用此字段
注意:为了安全起见,此字段在此反射包外部均不可见。
AccessibleObject是Method,Field,Constructor的父类
可调用setAccessible
方法改变,如果设置为true,则表示可以忽略访问权限的限制,直接调用。
便利方法来设置accessible标志对象的数组具有单个安全检查(效率)。 首先,如果有安全管理器,它checkPermission方法被称为一个ReflectPermission(“suppressAccessChecks”)的许可。 甲SecurityException如果升高flag是true ,但任何输入的元件中的可访问性array可以不改变(例如,如果元素对象是Constructor对象的类Class )。 在这样一个SecurityException的情况下,对象的可访问性被设置为flag数组元素高达(但不包括),用于其中发生异常的元件; 元件以外(并包括)该元素的对发生异常的可接近不变。2 false,访问权限校验
Reflection.quickCheckMemberAccess方法先检查是不是public的
如果不是再用Reflection.getCallerClass(1)方法获得到调用这个方法的Class,然后做是否有权限访问的校验,校验之后缓存一次,以便下次如果还是这个类来调用就不用去做校验了,直接用上次的结果
3 调用MethodAccessor的invoke方法
每个Method对象包含一个root对象
-
用于共享MethodAccessors
此分支结构//仅当前只有两个级别深度(即一个根Method和可能指向它的许多Method对象) 如果此分支结构曾经包含循环,则可能会发生死锁 -
root对象里持有一个MethodAccessor对象
设置此Method对象的MethodAccessor和(递归)其根 获得的Method对象相当于一个root的镜像,所有这些Method对象共享root里的MethodAccessor对象(这个对象由ReflectionFactory方法生成,ReflectionFactory对象在Method类中是static final的由native方法实例化)。
- 如果noInflation的属性为true则直接返回MethodAccessorGenerator创建的一个MethodAccessor
- 否则返回DelegatingMethodAccessorImpl,并将他与一个NativeMethodAccessorImpl互相引用 但DelegatingMethodAccessorImpl执行invoke方法的时候又委托给NativeMethodAccessorImpl了
DelegatingMethodAccessorImpl
DelegatingMethodAccessorImpl 类对象就是一个代理对象,主要负责调用被代理对象 delegate 的 invoke() 方法
var1 就是控制器类 var2 就是 req 和 resp- 参考 https://www.cnblogs.com/onlywujun/p/3519037.html https://binshao.site/2019/04/03/Reflection/
转载地址:https://javaedge.blog.csdn.net/article/details/106552445 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月12日 22时11分38秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
对 && 和 || 这两个逻辑运算符进行一个深入的理解
2019-04-30
margin塌陷 和 margin合并 两个BUG
2019-04-30
javascript:null undefined 和 NaN 的区别
2019-04-30
javascript之 var,let, const之间的异同
2019-04-30
Impala查询卡顿分析案例
2019-04-30
如何对CDH集群中的Impala打印线程堆栈
2019-04-30
Impala元数据简介
2019-04-30
Impala关于ValueTransferGraph一段代码的疑问解答
2019-04-30
Impala元数据缓存的生命周期
2019-04-30
Impala编译:一个maven编译错误的解决
2019-04-30
动态调整Impala日志级别
2019-04-30
Impala 3.4的新功能和社区进展
2019-04-30
错误的locale设置导致Impala crash
2019-04-30
在CDH6.3中单独升级Impala到Apache Impala 3.4
2019-04-30
如何参与Impala社区的讨论
2019-04-30
记一次曲折的Debug经历
2019-04-30
Impala支持Google云存储开发笔记
2019-04-30
如何在Apache JIRA中搜索issue
2019-04-30
Impala-shell相关源码笔记
2019-04-30