SpringAOP前提知识-静态代理

静态代理实现:

举个简单的栗子:
我们(目标角色)需要租房(共同行为),我们找的是房屋中介(存在租房的共同行为),而房屋中介不仅会完成我们租房的需求,还会帮我们找房源,拟定合同等事务(增强共同行为)。

接口: 共同行为

public interface RentHouse {
    //租房
    void toRentHouse();
}

目标角色: 实现行为,被代理类

public class Tenant implements RentHouse {
    @Override
    public void toRentHouse() {
        System.out.println("租房子");
    }
}

代理对象: 实现行为,增强目标对象的实现行为

public class Agency implements RentHouse{

    //目标角色
    private  RentHouse target;

    //带参构造将目标角色传入代理类
    public Agency(RentHouse target) {
        this.target=target;
    }

    @Override
    public void toRentHouse() {

        //功能扩展
        System.out.println("发布租房信息");
        System.out.println("拟定合同");

        //实现目标角色方法
        target.toRentHouse();
        
        //功能扩展
        System.out.println("后续工作");
    }
}

测试:

public class TestStaticProxy {
    public static void main(String[] args) {
        //1:得到目标角色
        Tenant target=new Tenant();

        //2:得到代理角色
        RentHouse agency=new Agency(target);
    
        //3:代理角色实现目标角色行为
        agency.toRentHouse();
    }
}

静态代理三要素:

  1. 共同行为->接口
  2. 目标角色->实现行为
  3. 代理角色->实现行为,增强目标对象的实现行为

静态代理特点:

  1. 目标角色固定(只能为某一目标角色做代理,比较单一)
  2. 在程序执行前需要得到目标角色
  3. 代理对象会增强目标对象行为
  4. 当有大量代理行为时,存在多个代理类

静态代理存在的问题:

当存在大量代理行为,我们必须创建多个代理类,代理类和目标类存在一对一的关系,容易造成"类爆炸"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值