0
点赞
收藏
分享

微信扫一扫

java源码解析之反射(二)


    今天心情很沉重,原因种种便不细说。 按照计划今天要记录关于代理的源码。先上依赖的结构图:

java源码解析之反射(二)_参数类型

    类不是很多,按查看的时间线来进行记述。

java源码解析之反射(二)_内部类_02

    官方说明,配合有道蹩脚的翻译。。

java源码解析之反射(二)_泛型类_03

    解释很多,再读的时候发现已经有些蒙蔽。大致是描述  代理 的结构构成。

java源码解析之反射(二)_参数类型_04

    执行的相关参数。

java源码解析之反射(二)_泛型类_05

    InvocationHandler作为一个抽象,充当该类中的关键实现。   类似于Thread  与  Runnable的关系。

java源码解析之反射(二)_内部类_06

构造的相关说明。  可见其留给子类的只有一个构造,即  包含  InvocationHandler的构造。

java源码解析之反射(二)_泛型类_07

    比较重要的一个方法。  对于代理的接口有数量的限制。

java源码解析之反射(二)_参数类型_08

    代理类的缓存。。 通过查看源码,可以看到其中有两个十分关键的内部类,KeyFactory和 ProxyClassFactory。   再结合类结构依赖图,可以看到它们与ref包下的一些类有较密切的联系,因此不妨进去看看:

java源码解析之反射(二)_内部类_09

java源码解析之反射(二)_内部类_10

java源码解析之反射(二)_内部类_11

java源码解析之反射(二)_参数类型_12

    图中的反射应为引用,笔误笔误。

java源码解析之反射(二)_内部类_13

    以上是Reference的一些较重要的说明,然后看一下它主要的一个依赖:ReferenceQueue:

java源码解析之反射(二)_参数类型_14

java源码解析之反射(二)_泛型类_15

   看它的名字,本以为会继承util包下的一些机构方法。  看后知道原来它是自己使用的一个引用队列,通过自己的属性。 挺有意思的。看完引用相关的,回溯到 proxy中的两个主要的内部类,其一:KeyFactory

java源码解析之反射(二)_泛型类_16

其二,ProxyClassFactory

java源码解析之反射(二)_参数类型_17

java源码解析之反射(二)_内部类_18

    后面调试的时候可以发现,这个厉害了。  因为它是到目前为止所知的能够生成类的相关的一套方法。  我们一起顶多也就实例化类之类的,拷贝对象等等。 所有的这种从无到有的操作都是基于对象,这个可是基于类。   算是颠覆了一下自己的认知,以后有机会了研究。 

    看完了大致的一些方法,回顾一下这个类,可以知道它有一个关键成员  InvocationHandler t。  因此不得不去看一下:

java源码解析之反射(二)_泛型类_19

    其提供了invoke方法的抽象。  此外便没有什么特别的。 另外,前面的KeyFactory不同程度地继承了引用体系,同时实现了BiFunction。   猜测可能是二进制方法的意思。其构成:

java源码解析之反射(二)_参数类型_20

java源码解析之反射(二)_内部类_21

    可以发现它是有三个泛型类,这还是比较少见的。  这里它即声明了参数类型,对象,以及返回值。  这跟invoke方法有一些相似呢。 

    以上便是关于代理的相关内容。  接下来记录的是调试的过程。

举报

相关推荐

0 条评论