1. 定义接口

2.实现接口的具体类

3.创建 InvocationHandler 实现

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyInvocationHandler implements InvocationHandler {
    private Object target;

    public MyInvocationHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Before method execution");
        Object result = method.invoke(target, args); // 调用实际方法
        System.out.println("After method execution");
        return result;
    }
}

 

4. 使用 Proxy 类来创建代理对象

 

Proxy.newProxyInstance(
                target.getClass().getClassLoader(),    // 类加载器
                target.getClass().getInterfaces(),     // 被代理对象的接口
                handler);              

 

为什么不直接代理实现类?

实现类无法直接代理的原因
代理类继承自 Proxy:JDK 动态代理生成的代理类是继承自 Proxy 类的,而 Java 不允许多重继承。
因此,代理类不能继承具体的实现类,只能通过实现接口来进行代理。

 

posted on 2024-10-01 12:24  towboat  阅读(0)  评论(0编辑  收藏  举报