原理

  • 静态代理=代理模式
  • 动态代理=代理模式+反射
  • 代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强
  • 代理类和被代理类应该共同实现一个接口,或者是共同继承某个类
  • 静态代理是事先定义好的,当需要附加的功能较多时,或代理的类较多时,代码量也会随之增大
  • 通过动态代理,代理类和被代理类在代码上实现了解耦,可在运行时动态地创建原始类对应的代理类,然后在系统中用代理类替换掉原始类,代理类和被代理类可以灵活组合,而不再增加代码量

应用

  • Spring AOP 中,用户配置好需要给哪些类创建代理,并定义好在执行原始类的业务代码前后执行哪些附加功能,Spring为这些类创建动态代理对象,并在JVM中替代原始类对象,原本在代码中执行的原始类方法,被换做执行代理类的方法,实现了为原始类附加功能的目的
  • 业务系统的非功能性需求开发
  • RPC框架(远程代理)
  • 缓存

同装饰器的联系与区别

  • 代理(proxy)和装饰器(decorator)都能给类增加功能
  • 区别在于,代理关注对象的信息隐藏及访问控制,体现封装性,装饰器关注为对象动态地添加功能,调整代码时更加灵活,体现多态性
  • 代理适用于业务无关,抽象度高,稳定度高的场景(如缓存);装饰器适用于偏重业务相关,定制化诉求高,改动频繁的场景
  • 使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰器能够在运行时递归地被构造
  • 代理强调对实际执行者的替代(代售点代替铁路局卖票,买票人不关心谁卖),装饰强调对自身的增强(为面包加果酱和蔬菜成为三明治,后期也可能想加点别的)
  • 二者容易混淆的原因在于,同样是A对B进行了修饰,站在A的角度,A就是代理,站在B的角度,A就是装饰器。而Java中类名是Proxy,用的多了就习惯把两种模式都称为代理
  • Java IO 使用了装饰器,用户在使用的时候,可以任意组装,达到自己想要的效果

参考

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

https://blog.csdn.net/briblue/article/details/73928350

装饰模式与代理模式的区别

https://blog.csdn.net/qq_34680763/article/details/99983866

https://zhuanlan.zhihu.com/p/97499017

动态代理实例

https://blog.csdn.net/luzhensmart/article/details/82912226

[Java] 静态代理 动态代理的更多相关文章

  1. java静态和动态代理原理

    一.代理概念 为某个对象提供一个代理,以控制对这个对象的访问. 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代.代理类负责请求的预处理.过滤.将请求分派给委托类 ...

  2. java 笔记(3) —— 动态代理,静态代理,cglib代理

    0.代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口. 代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类与委托类之间通常会存 ...

  3. 轻松理解 Java 静态代理/动态代理

    目录 什么是代理模式 定义 代理模式的主要角色 优点 缺点 静态代理 动态代理 JDK原生动态代理 例子 分析 小结 CGLIB动态代理 例子 分析 final类型 其他方案 尾声 理解Java动态代 ...

  4. Java 反射 设计模式 动态代理机制详解 [ 转载 ]

    Java 反射 设计模式 动态代理机制详解 [ 转载 ] @author 亦山 原文链接:http://blog.csdn.net/luanlouis/article/details/24589193 ...

  5. 【SSH系列】静态代理&&动态代理

    从设计模式说起 代理模式是二十三中设计模式中的一种,代理模式就是指由一个代理主题来操作真实的主题,真实的主题执行具体的业务操作,而代理主题负责其她相关业务,简而言之,代理模式可以由以下三个部分组成: ...

  6. 细说java系统之动态代理

    代理模式 在深入学习动态代理之前,需要先掌握代理模式.只有深刻理解了代理模式的应用,才能充分理解Java动态代理带来的便利. 在生活中存在许多使用"代理模式"的场景,比如:村里的张 ...

  7. 杨晓峰-Java核心技术-6 动态代理 反射 MD

    目录 第6讲 | 动态代理是基于什么原理? 典型回答 考点分析 知识扩展 反射机制及其演进 动态代理 精选留言 Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAnd ...

  8. 十分钟理解Java中的动态代理

    十分钟理解 Java 中的动态代理   一.概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品.关于微商代理,首先我们从他们那里买东西时通常不知道 ...

  9. 静态代理,动态代理,Cglib代理详解

    一.静态代理 新建一个接口 定义一个玩家方法: package com."".proxy.staticc; public interface Iplayer { public vo ...

  10. 深度剖析java中JDK动态代理机制

    https://www.jb51.net/article/110342.htm 本篇文章主要介绍了深度剖析java中JDK动态代理机制 ,动态代理避免了开发人员编写各个繁锁的静态代理类,只需简单地指定 ...

随机推荐

  1. 懵了!女朋友突然问我MVCC实现原理

    前言 都知道事务的可重复读级别实现原理是使用MVCC实现的,那么你对MVCC的底层实现原理知道多少呢?面试高频点,你值得拥有. 一.MVCC到底是什么? MVCC即多版本控制器,其特点就是在同一时间, ...

  2. kong更改日志格式

    基于业务的需求,需要对网关层的日志进行适当定制,以满足使用kibana的制图. 对于kong的日志格式更改,可查看到的资料都过于繁琐,特此记录. 修改kong的日志格式 # ctl edit depl ...

  3. (6)MySQL进阶篇SQL优化(MyISAM表锁)

    1.MySQL锁概述 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源 (如 CPU.RAM.I/O 等)的抢占以外,数据也是一种供许多用户共享的资源.如何保证数 据并 ...

  4. java io系列

    java io系列01之 "目录" java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream) java io系列03之 ...

  5. redis的持久化有哪几种方式?不同的持久化机制都有什么优缺点?(偏难)

    1.RDB和AOF两种持久化机制的介绍 RDB持久化机制,对redis中的数据执行周期性的持久化 AOF机制对每条写入命令作为日志,以append-only的模式写入一个日志文件中,在redis重启的 ...

  6. 华为云PB级数据库GaussDB(for Redis)揭秘第八期:用高斯 Redis 进行计数

    摘要:高斯Redis,计数的最佳选择! 一.背景 当我们打开手机刷微博时,就要开始和各种各样的计数器打交道了.我们注册一个帐号后,微博就会给我们记录一组数据:关注数.粉丝数.动态数-:我们刷帖时,关注 ...

  7. Day11_56_在SortedSet中使用泛型

    在SortedSet中使用泛型 import java.util.SortedSet; import java.util.TreeSet; //主类 public class GenericTest0 ...

  8. Day03_16_递归

    Java递归 递归包含两个部分 递归头: 标明了什么时候结束递归调用,如果没有递归头,程序将陷入死循环. 递归体: 标明了什么时候需要继续调用自身. 实例 import java.util.Scann ...

  9. SpringAOP_设置注入实现

    SpringAOP_设置注入实现 AOP_面向切面编程初步了解 让我们先想象一个场景,你正在编写一个项目,在开发过程中的多个模块都有某段重复的代码,于是你选择将其抽象成一个方法,然后在需要的地方调用这 ...

  10. 什么是响应式web设计

    什么是响应式web设计 现在开发一个产品,基本上都会需要兼顾 PC端和 移动端. 一般有两种思路: 1.为每个终端做一个特定的版本,并给2级域名,根据终端环境调用不同的版本代码. 2.一个网站能够兼容 ...