Spring代理模式理解-静态代理

本文介绍了代理模式在AOP中的重要性,详细解析了静态代理的概念和角色,包括抽象角色、真实角色、代理角色和客户角色。通过代码示例展示了静态代理的实现,并探讨了其优点,如职责分离、公共业务处理的集中和扩展性。同时也指出静态代理的缺点,即当真实角色增多时,代理角色的数量也会相应增加,降低了开发效率。最后,文章暗示了动态代理作为解决静态代理缺点的一种方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代理模式
为什么要学习代理模式,因为AOP的底层就是动态代理

代理模式

  • 静态代理
  • 动态代理

学习AOP之前了解一下代理模式

静态代理
静态搭理的角色分析

  • 抽象角色:一般使用接口和抽象类来定义(真实角色和代理角色要做的事情)
  • 真实角色:被代理的角色(事情的幕后操控者)
  • 代理角色:代理真实角色的角色(给幕后操作者跑腿的人)同时还会做一些自己的事情
  • 客户:使用代理角色进行一些操作(与跑腿的打交道的人)

代码实现
抽象角色

public interface Rent {

    /**
     * 抽象角色--真实角色和代理角色需要共同去完成的事情
     */
    public void rent();
}

真实角色

public class Host implements Rent {

    /**
     * 真实角色要去完成的事情
     */
    @Override
    public void rent() {
        System.out.println("房东要出租房屋");
    }
}

代理角色

public class Proxy implements Rent{
    /**
     * 中介(代理角色)背后的老板(真实角色)
     */
    private Host host;

    /**
     * 中介(代理角色)要和老板产(真实角色)生关系
     * @param host
     */
    public Proxy(Host host) {
        this.host = host;
    }

    /**
     * 代理角色要去完成的事情
     */
    @Override
    public void rent(){
        /**
         * 中介(代理角色)要去完成的老板(真实角色)要完成的事情
         */
        host.rent();

        /**
         * 中介(代理角色)去完成老板(真实角色)没有要求的附带操作
         */
        seeHouse();
        hetong();
    }


    /**
     * 中介(代理角色)除了完成老板(真实角色)交代的事情以外
     * 自己还要去做的附加操作
     */
    public void seeHouse(){
        System.out.println("中介带客户看房子");
    }

    public void hetong(){
        System.out.println("中介代替老板和客户签合同");
    }
}

客户

public class Client {
    public static void main(String[] args) {
        /**
         * 创建真实角色
         */
        Host host=new Host();
        /**
         * 创建代理角色
         */
        Proxy proxy=new Proxy(host);

        /**
         * 客户通过中介(代理角色)去做老板(真实角色)要做的事情-出租房子(抽象角色)
         */
        proxy.rent();
    }
}

分析: 在这个过程中,你直接接触的就是中介,就如同现实生活中的样子,你看不到房东,但是你依旧租到了房东的房子通过代理,这就是所谓的代理模式。

静态代理的好处

  • 可以使得真实角色更加的纯粹,不再去关注一件事情核心部分之外的公共事情
  • 公共的事情可以交给代理去处理,实现了业务的分工
  • 公共业务发生扩展时变得更加集中和方便

静态代理的缺点:

  • 真实角色越多,代理角色就越多,需要写的类更多了,开发效率降低

如果我们既要享受静态代理的好处,又要避免动态代理的缺点,就出现了动态代理!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值