美文网首页
插件化基础知识之代理&动态代理

插件化基础知识之代理&动态代理

作者: 没有了遇见 | 来源:发表于2024-03-25 19:55 被阅读0次

代理
代理模式是一种设计模式,代理为其代理的对象提供一种代理以控制对这个对象的访问;在代理模式中 代理对象可以在访问被代理对象之前和之后添加额外的功能

优点:
在不修改代码的前提下可以对功能进行扩展
静态代理缺点:
需要创建代理类,多个功能需要创建多个代理类增加迭代成本

示例:
权限访问 根据不同的权限访问代理对象
Vip访问 根据不同的VIP访问代理对象
Retrofit retrofit代理了okhttp 在不改变okhttp代码的情况下添加 打印 添加头信息 格式化返回数据信息的功能

1:静态代理


/**
 * 功能接口
 */
public interface Pay {
    void shoppingPay();
}

/**
 * 被代理对象
 */
public class PayAction implements Pay{
    PayInfo info;
    public PayAction(PayInfo info) {
        this.info=info;
    }

    @Override
    public void shoppingPay() {
        System.out.println("PayAction:"+"开始支付");
        System.out.println("PayAction:"+info.toString());
        System.out.println("PayAction:"+"支付完成");
    }
}

/**
 * 代理对象
 */
public class PayProxy implements Pay{
    Pay pay;
    public PayProxy(Pay pay) {
        this.pay = pay;
    }
    @Override
    public void shoppingPay() {
        // 只代理学生对象
        //这里可以添加 登录 库存校验
        if (pay!=null){
            System.out.println("PayProxy:"+"校验登录...");
            pay.shoppingPay();
            System.out.println("PayProxy:"+"支付完成后逻辑处理...");
        }
        //这里可以添加 支付完成后的校验
    }
}

2:动态代理

   PayInfo proxyPayInfo1= new PayInfo("动态代理支付",500);
        PayAction proxyPay1= new PayAction(proxyPayInfo1);
        InvocationHandler handler1= new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                try {
                    System.out.println("ProxyInvocationHandler:" + "校验登录...");
                    Object result = method.invoke(proxyPay1, args);
                    System.out.println("ProxyInvocationHandler:" + "支付完成后逻辑操作...");
                } catch (Exception e) {

                }
                return null;
            }
        };

        Pay pay1= (Pay) Proxy.newProxyInstance(Pay.class.getClassLoader(),new Class[]{Pay.class},handler1);
        pay1.shoppingPay();

相关文章

  • 代理模式

    Android插件化原理解析——Hook机制之动态代理 Android插件化原理解析——概要 Retrofit2 ...

  • Android插件化

    插件化涉及的东西很多,下面从基础知识、插件化技术和主流的插件化框架来介绍 基础知识 类加载器原理 反射原理 代理模...

  • Java 动态代理

    java的动态代理机制详解 JDK动态代理详解 Java核心技术点之动态代理

  • 插件化笔记 - 动态代理

    插件化离不开代理与反射,反射我们已经很熟悉了,我们可以在各种各样的三方库中找到类似的使用,但是代理却感觉是一个抽象...

  • 面试系列~动态代理实现与原理

    动态代理有JDK动态代理, CGLIB动态代理, SpringAOP动态代理 一,JDK动态代理  jdk动态代理...

  • 编程常用的设计模式

    动态代理和静态代理 静态代理 动态代理 静态代理与动态代理的区别 JDK中的动态代理和CGLIB 实现动态代理的方...

  • 设计模式之代理模式

    设计模式之代理模式 10分钟看懂动态代理设计模式(升级篇)-对这篇动态代理模式的思路整理 仿JDK实现动态代理逻辑...

  • Spring的AOP原理分析

    一 动态代理 动态代理分为JDK动态代理和CGLIB动态代理 jdk动态代理 被代理类(目标类)和代理类必须实现同...

  • 设计模式之代理模式

    代理分为静态代理和动态代理。 动态代理又包括基于JDK的动态代理、基于CGlib 的动态代理、基于Aspectj实...

  • Java高级主题(五)——动态代理

    代理可以分为静态代理、动态代理,动态代理又可以分为 jvm的动态代理 和 cglib的动态代理。像spring框架...

网友评论

      本文标题:插件化基础知识之代理&动态代理

      本文链接:https://www.haomeiwen.com/subject/idkjtjtx.html