JDK的动态代理
-
运行过程:
JVM -> 动态代理类 -> 代理对象
-
Proxy.newProxyInstance方法参数详解
- 三个参数:
- loader: 用哪个类加载器去加载代理对象
- interfaces: 动态代理类需要实现的接口
- h: 动态代理方法在执行时,会调用h里面的invoke方法去执行
1. ClassLoader loader
(1)类加载器的作用:
1. 通过类加载器把对应类的字节码文件加载JVM
2. 通过类加载器创建类的Class对象, 进而创建这个类的对象
(2)类加载器的运行过程:
.java -> .class(字节码文件) -> (通过类加载器)加载到JVM -> (通过类加载器创建).class对象 -> new 类的对象
(3)如何获得类加载器
JVM会为每一个类的.class文件自动分配与之对应的类加载器
(4)备注:
Class对象记录了这个类最完整的信息
2. @NotNull Class<?>[] interfaces
通过 原始类对象.getClass().getInterfaces() 获得接口
3. @NotNull InvocationHandler h
简介: InvocationHandler接口是proxy代理实例的调用处理程序实现的一个接口,每一个proxy代理实例都有一个关联的调用处理程序;在代理实例调用方法时,方法调用被编码分派到调用处理程序的invoke方法。
当我们通过动态代理对象调用一个方法时候,这个方法的调用就会被转发到实InvocationHandler接口类的invoke方法来调用
/**
* Object: 返回原始方法的返回值
* proxy: 代理对象
* method: 我们所要调用某个对象真实的方法的Method对象, 即核心功能
* args: 原始方法的参数
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable;
- 代码演示
TextJDKProxy.java
package com.wyt.jdk;
import com.hello.wyt.User;
import com.hello.wyt.UserService;
import com.hello.wyt.UserServiceImpl;
import java.lang.reflect.</