ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

spring静态代理详解

2021-12-18 17:03:33  阅读:147  来源: 互联网

标签:售票厅 静态 spring price 代理 代售点 详解 买票 public


什么是代理模式?

Java代理模式简单来说就是对目标方法的增强。

过年回家我们都要买火车票,前些年买火车票我们需要自己去售票厅买票,而有些地方有火车票的代售点,这些代售点离你很近,你可以很方便地买到火车票。这些代售点等同于代理,买票就是我们的目标,我们可以直接在这些代售点买票,简化了中间过程,节省了我们的时间,这就是Java代理模式的思想。

Java中常见的事务、日志都是代理模式的一个应用,只需要加上相应的注解就可以实现事务的开启和提交,我们可以把更多的时间花在具体业务的实现上,将事务的具体实现交给代理来做。

什么是静态代理?

静态代理就是在程序运行之前,代理类的.class文件已经存在了。

静态代理需要先定义一个接口,让目标类和代理类同时实现这个接口,然后让代理类调用目标类,实现对目标类的功能增强。

买票接口

package com.teasir.spring.proxystatic;

public interface BuyTicket {
    void buy(Double price);
}

在售票厅买票

package com.teasir.spring.proxystatic;

/**
 * 在售票厅买票
 * */
public class BuyTicktImpl implements BuyTicket {
    @Override
    public void buy(Double price) {
        System.out.println("票面价格为:" + price);
    }
}

在代售点买票

package com.teasir.spring.proxystatic;
/**
 * 代售点帮助客户在售票厅买票
 * 代售点帮客户方便地买到票,收了部分手续费,客户也很认可
 * */
public class ProxyBuyTicketImpl implements BuyTicket {
    private BuyTicket buyTicket;

    public ProxyBuyTicketImpl(BuyTicket buyTicket) {
        this.buyTicket = buyTicket;
    }

    @Override
    public void buy(Double price) {
        System.out.println("客户非常方便地在楼下代售点买了票,付钱:"+price+"元,其中票价:"+(price-10)+"元,手续费:10元。");
        buyTicket.buy(price - 10);
    }
}

测试类

  package com.teasir.spring.proxystatic;
    
    public class StaticProxy {
        public static void main(String[] args) {
            //目标方法:在售票厅买票
            BuyTicktImpl buyTickt=new BuyTicktImpl();
            //代理方法,代售点帮忙在售票厅买票
            ProxyBuyTicketImpl proxyBuyTicket=new ProxyBuyTicketImpl(buyTickt);
            proxyBuyTicket.buy(110.00);
        }
    }
客户非常方便地在楼下代售点买了票,付钱:110.0元,其中票价:100.0元,手续费:10元。
票面价格为:100.0

静态代理缺点

静态代理虽然可以实现对目标类的增强,但从每个增强的目标类都要建立一个对应的代理类,这样还是会有不少重复代码的产生,复用性差。

在这里插入图片描述

参考文章

https://caoju.blog.csdn.net/article/details/90713500

https://blog.csdn.net/qq_36872046/article/details/108309451

https://blog.csdn.net/qq_25816185/article/details/110741279

标签:售票厅,静态,spring,price,代理,代售点,详解,买票,public
来源: https://blog.csdn.net/qq_36109477/article/details/122013911

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有