• Spring-10-AOP先验知识之代理模式


    10. 代理模式

    在学AOP之前,先理解代理模式!

    为什么要学习代理模式?

    因为这就是Spring AOP的底层!

    【SpringAOP和SpringMVC】

    代理模式的分类:

    • 静态代理
    • 动态代理

    在这里插入图片描述

    10.1 静态代理

    角色分析:

    • 抽象角色:一般会使用接口和抽象类来解决
    • 真实角色:被代理的角色
    • 代理角色:代理真实角色,代理真实角色后,一般会做一些附属操作
    • 客户:访问代理对象的人

    代码演示步骤:

    1. 接口

      //租房案例
      public interface Rent {
          public void rent();
      }
      
    2. 真实角色

      //房东
      public class Host implements Rent{
      
          public void rent() {
              System.out.println("房东要出租房子!");
          }
      }
      
    3. 代理角色

      public class Proxy implements Rent{
          private Host host;
      
          public Proxy() {
          }
      
          public Proxy(Host host) {
              this.host = host;
          }
      
          public void rent() {
              seeHouse();
              host.rent();
              hetong();
              fare();
          }
          //看房
          public void seeHouse(){
              System.out.println("中介带你看房!");
          }
          //收中介费
          public void fare(){
              System.out.println("收中介费!");
          }
          //签合同
          public void hetong(){
              System.out.println("签租赁合同!");
          }
      }
      
    4. 客户端访问代理角色

    public class Client {
        public static void main(String[] args) {
            Host host = new Host();
    
            //代理,中介一般会有一些附属操作
            Proxy proxy = new Proxy(host);
    
            //不用直接面对房东,直接找中介租房即可
            proxy.rent();
        }
    }
    

    代理模式的好处

    • 可以使真实角色的操作更加纯粹!不用去关注公共业务!
    • 公共业务交给代理角色!实现了业务的分工!
    • 公共业务发生扩展的时候,方便集中管理!

    缺点:

    • 一个真实角色会产生一个代理角色;开发效率会变低。

    10.2 加深理解

    聊聊AOP

    在这里插入图片描述

    10.3 动态代理

    • 动态代理和静态代理角色一样
    • 动态代理的代理类是动态生成的,不是直接写好的!
    • 动态代理也分类两大类:
      • 基于接口的动态代理【我们这里使用】
        • JDK动态代理
      • 基于类的动态代理
        • cglib
      • java字节码实现:javasist

    需要了解两个类:

    • Proxy:代理;
    • InvocationHandler:调用处理程序;

    动态代理的好处:

    • 可以使真实角色的操作更加纯粹!不用去关注公共业务!
    • 公共业务交给代理角色!实现了业务的分工!
    • 公共业务发生扩展的时候,方便集中管理!
    • 一个动态代理类代理的是一个接口,一般就是对应的一类业务!
    • 一个动态代理类可以代理多个类,只要实现了同一个接口即可!
  • 相关阅读:
    Windows系统 Mysql5.6下载安装以及配置
    【翻译】Javascript “组件模式” 深入研究
    【原创】使用GridView实现绑定List并排序
    【翻译】【项目架构必备】Asp.Net MVC3 定义自己的项目模板
    【原创】也谈我如何解决Silverlight跨域访问安全性问题
    【翻译】MVC 3 Razor语法技巧之——The @helper syntax
    【翻译】Knockout 2.1版本发布&新特性一览
    【原创】三把利器快速制作代码帮助文档
    现代软件工程_团队项目_阿尔法阶段_第二次会议记录_2017.11.13
    现代软件工程_团队项目_阿尔法阶段_需求分析文档_2017.11.13
  • 原文地址:https://www.cnblogs.com/CodeHuba/p/13564297.html
Copyright © 2020-2023  润新知