美文网首页
Spring--代理模式

Spring--代理模式

作者: 何以解君愁 | 来源:发表于2022-08-13 02:06 被阅读0次

代理模式:
二十三种设计模式中的一种,属于结构型模式。它的作用就是通过提供一个代理类,让我们在调用目标方法的时候,
不再是直接对目标方法进行调用,而是通过代理类间接调用。让不属于目标方法核心逻辑的代码从目标方法中剥离出来一—解耦。
调用目标方法时先调用代理对象的方法,减少对目标方法的调用和打扰,同时让附加功能能够集中在一起也有利于统一维护。
(简而言之,是为目标对象创建代理对象,访问目标对象通过代理对象访问,在代理对象控制目标对象实现的功能,我们可以在代理对象中在目标对象实现上加入一些额外功能的操作)

静态代理:大致思路,创建一个类继承目标对象的方法,重写,之后在重写之上创建private 目标对象 自己取名;创建有参构造
(一对一,代码写死,不具备灵活性,出现大量重复代码)(了解即可)

动态代理
(jdk模板)(必须有接口,最终生成代理类在com.sun.proxy包下,类名为$proxy2且其和目标类实现相同的接口):
public class ProxyFactory {
    private Object target;

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

    public Object getProxy() {
        /**
         * cLassLoader loader:指定加载动态生成的代理类的类加载器
         * cLass[] interfaces:获取目标对象实现的所有接口的cLass对象的数组
         * InvocationHandler h:设置代理类中的抽象方法如何重写
         */
        ClassLoader classLoader = this.getClass().getClassLoader();
        Class<?>[] interfaces = target.getClass().getInterfaces();
        InvocationHandler h = new InvocationHandler() {
            //proxy表示代理对象,method表示要执行的方法,args表示要执行的方法到的参数列表
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    //此处添加额外的操作
                Object result = method.invoke(target, args);
                return result;
            }
        };
        return Proxy.newProxyInstance(classLoader,interfaces,h);
    }
}

调用:假如有一个Calculator接口及其实现类
proxyFactory proxyFactory = new ProxyFactory(new calculatorImpl());
//向上转型获取类型
calculator proxy = (calculator) proxyFactory.getProxy();
proxy. add( i: 1, j: 2);
(cglib动态代理,最终生成的代理类会继承目标类并和目标类在相同包下)

相关文章

  • Spring--代理模式

    代理模式:二十三种设计模式中的一种,属于结构型模式。它的作用就是通过提供一个代理类,让我们在调用目标方法的时候,不...

  • 设计模式

    单例模式 模板方法模式 工厂模式 代理模式 静态代理 JDK动态代理

  • 设计模式

    单例模式 代理模式 静态代理 jdk动态代理 cglib动态代理 工厂模式 适配器模式 建造者模式 观察者模式

  • kube-proxy的3种模式

    userspace代理模式 iptables代理模式 IPVS代理模式 https://kubernetes.io...

  • 第4章 结构型模式-代理模式

    一、代理模式简介 二、代理模式3个角色 三、代理模式的优点 四、代理模式的实例(游戏代练)

  • 理解代理模式

    原创博客地址 简介 代理模式,也叫做委托模式,分为:静态代理动态代理 代理模式也是平时比较常用的设计模式之一,代理...

  • 结构型 代理模式(文末有项目连接)

    1:什么是代理模式 2:没用代理模式时的实例 3:使用代理模式将其解耦(静态代理) 3:使用代理模式将其解耦(动态...

  • 设计模式-动态代理模式

    之前介绍了代理模式,大家也都了解了代理模式,不过之前介绍的代理模式是静态代理,静态代理什么意思?静态代理指的是代理...

  • 代理模式

    一、什么是代理模式 代理模式(Proxy pattern):代理模式又叫委托模式,是为某个对象提供一个代理对象,并...

  • 设计模式之代理模式(Proxy模式)

    代理模式的引入 代理模式的实例程序 代理模式的分析 代理模式的引入 Proxy是代理人的意思,指的是代替别人进行工...

网友评论

      本文标题:Spring--代理模式

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