Spring中的代理模式,是Spring中一大核心 AOP(切面编程)的底层实现。

代理模式可分为:

  • 静态代理
  • 动态代理

静态代理

涉及三类角色,简单分析一下:

  • 抽象角色(一般会使用接口或抽象类解决)
  • 真实角色(被代理的角色)
  • 代理角色(代理真实角色,一般会做一些附属操作)

举一个租房APP的简单案例:

  1. 抽象角色(使用接口实现)
//租房
public interface Rent {public void rent();
}
  1. 真实角色(被代理角色)
//房东
public class Landlord implements Rent{public void rent() {System.out.println("房东要出租房子");}
}
  1. 代理角色(用于代理真实角色并实现一些被代理角色并不包含的功能)
//中介
public class Proxy implements Rent{//使用实现的方式代替继承private Landlord landlord;public Proxy() {}public Proxy(Landlord landlord) {this.landlord = landlord;}//代替租客租房public void rent() {seeHost();landlord.rent();hetong();fee();}//看房public void seeHost() {System.out.println("中介带你看房");}//签合同public void hetong() {System.out.println("签租赁合同");}//收中介费public void fee() {System.out.println("收中介费");}
}
  1. 客户端访问被代理角色
public class Client {public static void main(String[] args) {//房东Landlord landlord = new Landlord();//代理,中介帮房东出房子//但一般会有一些上述房东并不存在的附属操作Proxy proxy = new Proxy(landlord);//不用面对房东,通过代理租房proxy.rent();}
}

动态代理

• 动态代理和静态代理角色一样

• 动态代理的代理类是动态生成的,不是直接写好的

• 动态代理分为两大类:
○ 基于接口的动态代理——JDK动态代理【我们在此使用】
○ 基于类的动态代理——cglib
○ Java字节码实现:javassist

需要了解两个类:Proxy(代理),InvocationHandler(调用处理程序)
• Proxy
○ 提供创建动态代理类和实例的静态方法
○ 也是由这些方法创建的所有动态代理类的超类

• InvocationHandler
○ 代理实例的调用程序实现的接口
○ 每个代理实例都有一个关联的调用处理程序
○ 当在代理实例上调用方法时,方法调用将被编码分派到其调用处理程序的invoke方法

优点:
• 可以使真实角色的操作更加纯粹,不用关注公共的业务
• 公共业务交给代理角色,实现业务的分工
• 公共业务发生扩展时,方便集中管理
• 一个动态代理类代理的是一个接口,一般指一类业务
一个动态代理类可以代理多个类,只要是实现了同一个接口即可

Spring中的代理模式相关推荐

  1. 轻松学,Java 中的代理模式(proxy)及动态代理

    我们先来分析代理这个词. 代理 代理是英文 Proxy 翻译过来的.我们在生活中见到过的代理,大概最常见的就是朋友圈中卖面膜的同学了. 她们从厂家拿货,然后在朋友圈中宣传,然后卖给熟人. 按理说,顾客 ...

  2. 轻松学,Java 中的代理模式及动态代理

    前几天我写了<秒懂,Java 注解 (Annotation)你可以这样学>,因为注解其实算反射技术中的一部分,然后我想了一下,反射技术中还有个常见的概念就是动态代理,于是索性再写一篇关于动 ...

  3. 「补课」进行时:设计模式(5)——从 LOL 中学习代理模式

    1. 前文汇总 「补课」进行时:设计模式系列 2. 从 LOL 中学习代理模式 我是一个很喜欢玩游戏的人,虽然平时玩游戏的时间并不多,但我也是一个忠实的 LOL 的爱好者,就是段位有点惨不忍睹,常年倔 ...

  4. 第07课:生活中的代理模式——帮我拿一下快递

    用程序来模拟生活 从剧情中思考代理模式 代理模式的模型抽象 代码框架 类图 基于框架的实现 模型说明 代理模式的优点 代理模式的缺点 应用场景 [故事剧情] 八月中秋已过,冬天急速飞来--一场秋雨一场 ...

  5. Android中的代理模式

    Android中的代理模式 1. 什么是代理 比如我们生活中的找出租屋,需要去找中介进行寻找挑选.而这里的中介就是代理.列子中看出代理特点如下1. 租客跟中介要做成的最终目的是一致的就是租到房子(目标 ...

  6. 设计模式——从 LOL 中学习代理模式

    从 LOL 中学习代理模式 我是一个很喜欢玩游戏的人,虽然平时玩游戏的时间并不多,但我也是一个忠实的 LOL 的爱好者,就是段位有点惨不忍睹,常年倔强的黑铁,今年 S10 的总决赛在上海举行,这个事儿 ...

  7. Java中的代理模式

    1.什么是代理模式 代理模式:就是为其他对象提供一种代理以控制对这个对象的访问. 代理可以在不改动目标对象的基础上,增加其他额外的功能(扩展功能). 举个例子来说明代理的作用: 一般我们想邀请明星来当 ...

  8. 模式代码 java中aes_深入浅出:Java中的代理模式

    代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象,用来在系统中对原始的接口进行替换,然后在内部做一些增强处理.代理模式不会破坏系统的原有接口,不去修改原有的 ...

  9. Spring AOP理论 +代理模式详解

    目录 1.理解AOP 1.1.什么是AOP 1.2.AOP体系与概念 1.3.Spring AOP 通知的执行顺序 2.代理模式 2.1.静态代理 2.2.静态代理的缺点 3.动态代理 JDK 动态代 ...

最新文章

  1. 黑马程序员之List--队列、栈...
  2. ASP.NET图形化的曲线图类
  3. mysql数据库初识实训总结_MySQL数据库初识(基础语句)
  4. 亿级 Web 系统的容错性建设实践
  5. 学校计算机二级模拟上机能看分数吗,全国计算机二级考试机试考完怎么储存的...
  6. Mybatis学习笔记13 - 动态sql之set标签
  7. centos 6.2安装mysql_CentOS 6.2下安装MySQL_服务器知识学堂-中关村在线
  8. 计算机数学基础 视频讲解,计算机数学基础课件
  9. 父元素与子元素的width关系
  10. python主成分分析法实训报告_基于 python 的主成分分析步骤及应用实例
  11. linux 域名对应ip 端口号,【原创】Linux基础之测试域名IP端口连通性
  12. 一篇不大正经的关于数论的总结(未完
  13. 单元测试和sit测试和uat测试
  14. sqlmap安装及问题汇总
  15. 使用花生壳将内网服务发布到外网
  16. 我的世界游戏服务器改名
  17. win10安装lr11
  18. 如何用Word打开PDF文件?
  19. Qt QSqlQueryModel实现查询数据库内容
  20. 福建农林大学计算机课程表,福建农林大学金山学课程表.doc

热门文章

  1. android获取apk名称_apk瘦身;如何缩小体积呢?这篇文章来教你
  2. word中如何进行中英文字体格式修改--以及数字上下标
  3. JAVA毕业设计会展中心招商服务平台计算机源码+lw文档+系统+调试部署+数据库
  4. python输入以回车结束_python将回车作为输入内容的实例
  5. 看百度小度在节目中对答如流,想起了某银行大堂机器人
  6. Windows快速打开命令及快捷键
  7. 【人工智能与机器学习第1次作业】---Python环境配置与数据处理
  8. 《TCP IP网络编程》((韩)尹圣雨) - 网络编程、服务器网络模型
  9. 项目打包和自动化部署
  10. Android一款简单的天气APP