结构性-代理模式

动态代理主要是为了处理重复创建模板代码的场景。

使用示例

复制代码
public interface MyInterface {
    String doSomething();
}

public class MyInterfaceImpl implements MyInterface{
    @Override
    public String doSomething() {
        return "接口方法dosomething";
    }
}

public class MyInvocationHandler implements InvocationHandler {

    private final Object target;

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

    @Override
    public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
        System.out.println("Before method: " + method.getName());
        Object result = method.invoke(target, objects); // 调用实际对象的方法
        System.out.println("After method: " + method.getName());
        return result;
    }
}

public class Execute {

    public String execute(){
        MyInterface realObject = new MyInterfaceImpl();
        MyInterface proxyInstance = (MyInterface) Proxy.newProxyInstance(
                MyInterface.class.getClassLoader(),
                new Class<?>[] { MyInterface.class },
                new MyInvocationHandler(realObject)
        );

        return proxyInstance.doSomething(); // 调用代理对象的方法,实际调用的是
    }
}

Proxy.newProxyInstance是Java动态代理的核心方法,其三个参数功能如下:

‌ClassLoader loader‌

负责加载动态生成的代理类字节码,通常使用目标接口的类加载器(如UserService.class.getClassLoader())23。该参数决定代理类的JVM加载方式1。

‌Class<?>[] interfaces‌

指定代理类需要实现的接口数组(如new Class[]{A.class, B.class}),代理对象将具备这些接口定义的方法能力35。注意该参数仅定义接口而非具体被代理对象1。

‌InvocationHandler handler‌

通过实现invoke方法定义代理逻辑,当调用代理对象方法时会触发此处理器,参数包含代理实例、方法对象及方法参数45。开发者在此实现横切逻辑(如日志、事务)

相关推荐
运维儿14 小时前
7.ARP 代理与端口隔离:满足通信需求,保证通信安全
网络·智能路由器·代理模式·linux 网络·云计算网络
panzer_maus3 天前
工厂模式、代理模式与单例模式的介绍
java·设计模式·代理模式
花月C4 天前
线性动态规划(Linear DP)
算法·动态规划·代理模式
散峰而望4 天前
【基础算法】动态规划从入门到进阶:记忆化搜索、线性 DP、LIS/LCS 一网打尽
c++·后端·算法·github·深度优先·动态规划·代理模式
淡忘旧梦4 天前
ChatGPT回答白屏
人工智能·chatgpt·代理模式
会编程的土豆4 天前
【数据结构与算法】动态规划
数据结构·c++·算法·leetcode·代理模式
范纹杉想快点毕业6 天前
C语言编程实战宝典:550例精解·涵盖基础语法·数组指针·位运算·递归·贪心·动态规划
c语言·动态规划·代理模式
想不明白的过度思考者6 天前
SpringAOP:Java 三大代理模式:从静态代理到 JDK & CGLIB 动态代理
java·开发语言·代理模式
※DX3906※8 天前
SpringBoot之旅5| 快速上手SpringAOP、深入刨析动态/静态两种代理模式
java·数据库·spring boot·后端·spring·java-ee·代理模式
无籽西瓜a8 天前
【西瓜带你学设计模式 | 第九期 - 代理模式】代理模式 —— 静态与动态代理实现、优缺点与适用场景
java·后端·设计模式·软件工程·代理模式