结构性-代理模式

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

使用示例

复制代码
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。开发者在此实现横切逻辑(如日志、事务)

相关推荐
wuqingshun3141597 天前
什么是代理模式?一般用在什么场景?
java·mysql·代理模式
我登哥MVP7 天前
走进 Gang of Four 设计模式:代理模式
设计模式·代理模式
折哥的程序人生 · 物流技术专研9 天前
Java 23 种设计模式:从踩坑到精通 | 番外:代理 vs 装饰器 —— Spring AOP 到底用了哪个?
java·代理模式·装饰器模式·java面试·java设计模式·springaop·从踩坑到精通
初学者,亦行者10 天前
算法设计与分析3:贪心法 - 求解最短路径问题(TSP)
算法·代理模式
2501_9160074713 天前
iPad 怎么抓包 从代理模式到暴力抓包的操作方法
android·ios·小程序·uni-app·代理模式·iphone·ipad
越甲八千13 天前
代理模式和适配器模式区别
代理模式·适配器模式
AI人工智能+电脑小能手17 天前
【大白话说Java面试题 第156题】【06_Spring篇】第16题:Spring 用到了哪些设计模式?
java·spring·设计模式·代理模式·工厂模式
许彰午1 个月前
36_Java设计模式之代理模式
java·设计模式·代理模式
devilnumber1 个月前
静态代理 & 动态代理:实战运用 + 场景区别 + 怎么选
java·开发语言·代理模式
devilnumber1 个月前
想真正吃透 + 灵活运用 Java 代理模式
java·开发语言·代理模式