https://blog.csdn.net/scplove/article/details/52451899
java
reflect
proxy
java.jpg
Java动态代理的类和接口
<artifactId>eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
-
java.lang.reflect.Proxy
:动态代理机制的主类,提供一组静态方法为一组接口动态的生成对象和代理类。
public static InvocationHandler getInvocationHandler(Object proxy)
public static Class<?> getProxyClass(ClassLoader loader, Class<?>... interfaces)
public static boolean isProxyClass(Class<?> cl)
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h)
-
java.lang.reflect.InvocationHandler
:调用处理器接口,自定义invokle方法,用于实现对于真正委托类的代理访问。
public Object invoke(Object proxy, Method method, Object[] args)throws Throwable
-
java.lang.ClassLoader
:类装载器类,将类的字节码装载到 Java 虚拟机(JVM)中并为其定义类对象,然后该类才能被使用。Proxy类与普通类的唯一区别就是其字节码是由 JVM 在运行时动态生成的而非预存在于任何一个 .class 文件中。
每次生成动态代理类对象时都需要指定一个类装载器对象:newProxyInstance()
方法第一个参数。
动态代理机制
- 通过实现
InvocationHandler
接口创建自己的调用处理器。 - 通过为Proxy类指定ClassLoader对象和一组interface来创建动态代理类。
- 通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型。
- 通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入。
网友评论