05、Spring框架入门:代理模式详解

代理模式详解

    • 1.代理模式简介
  • 2.静态代理
  • 3.JDK动态代理
  • 4.CGLIB动态代理

1.代理模式简介

  • 设计模式:是为了解决某一类问题的产生
  • 代理模式分为:
    静态代理
    动态代理[JDK动态代理、CGLIB动态代理]
  • 代理模式的三个要素
    抽象的类或者接口 —完成一件怎样的事情
    被代理对象—事情操作具体内容
    代理对象----帮助我们完成事情的同是可以增加其他的功能
  • 具体的例子: 我们找中介租房子
    抽象的类或者接口–租房子
    被代理对象—房东
    代理对象—中介
  • 代理模式的好处 :
    房东可以安心的做自己的事情–(被代理对象可以做自己的事情)
    我们有了问题直接找中介—(被代理对象变得比较的安全)
    可以增强代码的扩展性
  • 静态代理模式缺点
    随着被代理对象的增多,我们发现代理对象的压力越来越大,而且里面书写的代码也是比较臃肿的
  • JDK代理模式的缺点
    JDK代理模式是必须有接口的操作,如果没有对应的接口,这个时候JDK代理就没有办法使用

2.静态代理

以租房为例子:

package com.proxy1;

//定义我们需要完成租房的事情
public interface LetRoom {
   
   
     
    void zf();
}

package com.proxy1;

public class FD implements LetRoom {
   
   
     
    @Override
    public void zf() {
   
   
     
        System.out.println("--出租地球村XX号一楼--");
    }
}

package com.proxy1;

public class FD2 implements LetRoom {
   
   
     
    @Override
    public void zf() {
   
   
     
        System.out.println("--出租地球村XX号二楼--");
    }
}

package com.proxy1;

public class ZJ implements LetRoom {
   
   
     

    private int money;

    public ZJ(int money) {
   
   
     
        this.money = money;
    }

    @Override
    public void zf() {
   
   
     
        System.out.println("---收取推荐费50元---");
        //出租房东的租房--中介调用的租房方法仍然是房东的租房方法
        if (money <= 800) {
   
   
     
            FD fd = new FD();
            fd.zf();
        } else if (money < 2000 &&