2020-5-5 21:25:09

    代理模式的核心作用就是通过代理,控制对对象的访问。它的设计思路是:定义一个抽象角色,让代理角色和真实角色分别去实现它。

    真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。它只关注真正的业务逻辑,比如歌星唱歌。

    代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并在前后可以附加自己的操作,比如谈合同,布置场地,收钱等等。

    静态代理是我们自己创建一个代理类,而动态代理是程序自动帮我们生成一个代理

    静态代理:一个代理类只能对一个业务接口的实现类进行包装,属于“硬编码”,如果有多个业务接口的话就要定义很多实现类和代理类才行;而且因为代理类里面代理处置的事情经常是共同的,这样多个代理类就会有很多重复代码

    动态代理:它能代理所有实现类的方法调用:根据传进来的业务实现类和方法名进行具体调用,而不再是对一个具体的业务接口实现类进行包装,这样就大大增加了代理类的灵活性

    作者:辰辰_520
    链接:https://www.jianshu.com/p/58cc46371ff7
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    如果目标对象实现了接口,默认情况下会采用 JDK 的动态代理实现 AOP;如果目标对象没有实现了接口,则采用 CGLIB 库,Spring 会自动在 JDK 动态代理和 CGLIB 动态代理之间转换。