美文网首页Spring
Spring(第二讲之静态代理和动态代理)

Spring(第二讲之静态代理和动态代理)

作者: superNeil | 来源:发表于2020-06-01 21:15 被阅读0次

代理

代理是英文 Proxy 翻译过来的。我们在生活中见到过的代理,例如大部分微商 , 大概最常见的就是朋友圈中卖面膜的同学了。

她们从厂家拿货,然后在朋友圈中宣传,然后卖给熟人。 image-20200601210242276.png

按理说,顾客可以直接从厂家购买产品,但是现实生活中,很少有这样的销售模式。一般都是厂家委托给代理商进行销售,顾客跟代理商打交道,而不直接与产品实际生产者进行关联。

所以,代理就有一种中间人(中介)的味道。

接下来,我们说说软件中的代理模式。

静态代理

我们通过一条例子 来感受下 什么是静态代理 .

真实角色和代理角色 共同实现 接口 !

例如 :

真实角色 : You

代理角色 : 婚庆公司

实现相同的接口 : 结婚礼仪 .

public class StaticProxy {

    /**
     * 静态代理
     * 接口
     * 1.真实角色
     * 2.代理角色
     */
    public static void main(String[] args) {
        new WeddingCompany(new You()).happyMarry();
    }
}

//接口
interface Marry {
    void happyMarry();
}

//真实角色
class You implements Marry {
    @Override
    public void happyMarry() {
        System.out.println("我和嫦娥奔月了!");
    }
}

//代理角色
class WeddingCompany implements Marry {

    //真实角色  目标对象
    private Marry target;

    public WeddingCompany(Marry target) {
        this.target = target;
    }

    @Override
    public void happyMarry() {
        ready();
        this.target.happyMarry();
        after();
    }

    private void after() {
        System.out.println("结束");
    }

    private void ready() {
        System.out.println("忙前忙后");
    }
}

值得注意的是,代理类和被代理类应该共同实现一个接口,或者是共同继承某个类。

上面介绍的是静态代理的内容,为什么叫做静态呢?因为它的类型是事先预定好的,

****知道为什么要使用静态代理**
解决代码责任不分离的问题,但同样其也会带来,随着项目变大,业务类多的话,导致代理类太多**

动态代理

****知道为什么要使用动态代理**
不仅可以解决码责任不分离的问题,弥补静态代理的缺点
但同样有问题,API 不易使用,若用 Spring 的情况,配置过多**

使用 JDK 动态代理  代理类与真实类共同实现相同接口
使用 CGLIB 动态代理 代理类是继承真实类

总结

  1. 代理分为静态代理和动态代理两种。
  2. 静态代理,代理类需要自己编写代码写成。
  3. 动态代理,代理类通过 Proxy.newInstance() 方法生成。
  4. 不管是静态代理还是动态代理,代理与被代理者都要实现两样接口,它们的实质是面向接口编程。
  5. 静态代理和动态代理的区别是在于要不要开发者自己定义 Proxy 类。
  6. 动态代理通过 Proxy 动态生成 proxy class,但是它也指定了一个 InvocationHandler 的实现类。
  7. 代理模式本质上的目的是为了增强现有代码的功能。

相关文章

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

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

  • 带你初识Java的代理模式

    Spring AOP是基于动态代理设计模式实现的,相对的就有静态代理 动态代理和静态代理 静态代理 对于静态代理,...

  • spring aop 汇总

    静态代理、动态代理和cglib代理 aop 使用 Spring AOP - 注解方式使用介绍spring aop ...

  • 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP

    文章目录 Java的静态代理 静态代理的优缺点 ABAP的静态代理 Spring AOP的动态代理 JDK动态代理...

  • Spring AOP中的动态代理

    Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理: (3)静态代理与动态代理区别...

  • Spring(第二讲之静态代理和动态代理)

    代理 代理是英文 Proxy 翻译过来的。我们在生活中见到过的代理,例如大部分微商 , 大概最常见的就是朋友圈中卖...

  • Maven项目&Spring AOP基础(一)

    Spring AOP的底层机制就是动态代理。而代理模式又分为:静态代理、动态代理。 静态代理的角色分为:抽象角色 ...

  • 2018-10-03

    Spring aop 是通过代理实现的,代理有静态代理,jdk动态代理和cglib动态代理,代理就像我们生活中的房...

  • 编程常用的设计模式

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

  • Spring AOP 实现原理

    Spring AOP 实现原理 静态代理 众所周知 Spring 的 AOP 是基于动态代理实现的,谈到动态代理就...

网友评论

    本文标题:Spring(第二讲之静态代理和动态代理)

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