小知识:动态代理对象的java.lang.reflect.Proxy/InvocationHandler/Method部分方法分析

1:java.lang.reflect. Proxy

Class Proxy
Proxy提供了创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类

  • 动态代理类 (以下简称为代理类 )是一个实现在类创建时在运行时指定的接口列表的类,具有如下所述的行为。 代理接口是由代理类实现的接口。 代理实例是代理类的一个实例。 每个代理实例都有一个关联的调用处理程序对象,它实现了接口InvocationHandler 。 通过其代理接口之一的代理实例上的方法调用将被分派到实例调用处理程序的invoke方法,传递代理实例, java.lang.reflect.Method被调用方法的java.lang.reflect.Method对象以及包含参数的类型Object Object的数组。 调用处理程序适当地处理编码方法调用,并且返回的结果将作为方法在代理实例上调用的结果返回。

方法:

1:static Object newProxyInstance(ClassLoader loader, 类<?>[] interfaces, InvocationHandler h)
返回指定接口的代理类的实例,该接口将方法调用分派给指定的调用处理程序。

2: java.lang.reflect.InvocationHandler

Interface InvocationHandler
InvocationHandler是由代理实例的调用处理程序实现的接口 。
每个代理实例都有一个关联的调用处理程序。 当在代理实例上调用方法时,方法调用将被编码并分派到其调用处理程序的invoke方法。

方法:
Object invoke(Object proxy, 方法 method, Object [] args)
处理代理实例上的方法调用并返回结果。

参数
proxy :调用该方法的代理实例
method :所述方法对应于调用代理实例上的接口方法的实例。 方法对象的声明类将是该方法声明的接口,它可以是代理类继承该方法的代理接口的超级接口。
args :包含的方法调用传递代理实例的参数值的对象的阵列,或null如果接口方法没有参数。
结果
从代理实例上的方法调用返回的值。 如果接口方法的声明返回类型是原始类型,则此方法返回的值必须是对应的基本包装类的实例

3:java.lang.reflect.Method

Class Method
方法提供有关类和接口上单一方法的信息和访问权限。 反映的方法可以是类方法或实例方法(包括抽象方法)。

方法
Object invoke(Object obj, Object… args)
在具有指定参数的 方法对象上调用此 方法对象表示的底层方法。

参数
obj - 从底层方法被调用的对象
args - 用于方法调用的参数
结果
由该对象表示的方法在 obj上调用 args

发布了155 篇原创文章 · 获赞 73 · 访问量 3330

猜你喜欢

转载自blog.csdn.net/qq_44891295/article/details/103997317