[Java] 静态代理 动态代理
原理
- 静态代理=代理模式
- 动态代理=代理模式+反射
- 代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强
- 代理类和被代理类应该共同实现一个接口,或者是共同继承某个类
- 静态代理是事先定义好的,当需要附加的功能较多时,或代理的类较多时,代码量也会随之增大
- 通过动态代理,代理类和被代理类在代码上实现了解耦,可在运行时动态地创建原始类对应的代理类,然后在系统中用代理类替换掉原始类,代理类和被代理类可以灵活组合,而不再增加代码量
应用
- 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] 静态代理 动态代理的更多相关文章
- java静态和动态代理原理
一.代理概念 为某个对象提供一个代理,以控制对这个对象的访问. 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代.代理类负责请求的预处理.过滤.将请求分派给委托类 ...
- java 笔记(3) —— 动态代理,静态代理,cglib代理
0.代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口. 代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类与委托类之间通常会存 ...
- 轻松理解 Java 静态代理/动态代理
目录 什么是代理模式 定义 代理模式的主要角色 优点 缺点 静态代理 动态代理 JDK原生动态代理 例子 分析 小结 CGLIB动态代理 例子 分析 final类型 其他方案 尾声 理解Java动态代 ...
- Java 反射 设计模式 动态代理机制详解 [ 转载 ]
Java 反射 设计模式 动态代理机制详解 [ 转载 ] @author 亦山 原文链接:http://blog.csdn.net/luanlouis/article/details/24589193 ...
- 【SSH系列】静态代理&&动态代理
从设计模式说起 代理模式是二十三中设计模式中的一种,代理模式就是指由一个代理主题来操作真实的主题,真实的主题执行具体的业务操作,而代理主题负责其她相关业务,简而言之,代理模式可以由以下三个部分组成: ...
- 细说java系统之动态代理
代理模式 在深入学习动态代理之前,需要先掌握代理模式.只有深刻理解了代理模式的应用,才能充分理解Java动态代理带来的便利. 在生活中存在许多使用"代理模式"的场景,比如:村里的张 ...
- 杨晓峰-Java核心技术-6 动态代理 反射 MD
目录 第6讲 | 动态代理是基于什么原理? 典型回答 考点分析 知识扩展 反射机制及其演进 动态代理 精选留言 Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAnd ...
- 十分钟理解Java中的动态代理
十分钟理解 Java 中的动态代理 一.概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品.关于微商代理,首先我们从他们那里买东西时通常不知道 ...
- 静态代理,动态代理,Cglib代理详解
一.静态代理 新建一个接口 定义一个玩家方法: package com."".proxy.staticc; public interface Iplayer { public vo ...
- 深度剖析java中JDK动态代理机制
https://www.jb51.net/article/110342.htm 本篇文章主要介绍了深度剖析java中JDK动态代理机制 ,动态代理避免了开发人员编写各个繁锁的静态代理类,只需简单地指定 ...
随机推荐
- CVE-2020-1472 Zerologon
CVE-2020-1472 Zerologon 漏洞简介 CVE-2020-1472是继MS17010之后一个比较好用的内网提权漏洞,影响Windows Server 2008R 2至Windows ...
- java面试-谈谈你对volatile的理解
一.volatile特性: volatile是Java虚拟机提供的轻量级的同步机制.主要有三大特性: 保证可见性 不保证原子性 禁止指令重排序 1.保证可见性 1)代码演示 AAA线程修改变量numb ...
- 201871030118-雷云云 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客 班级链接 这个作业要求链接 作业链接 我的课程学习目标 (1)体验软件项目开发中的两人合作,练习结对编程(2)掌握Github协作开发程序的操作方法(3)学习遗传算法 这个作 ...
- 在Vue中使用sass和less,并解决报错问题(this.getOptions is not a function)
使用 Less 下载依赖:npm install less less-loader 在mian.js 中添加: import less from "less"; Vue.use(l ...
- win10美化,让你的win10独一无二,与众不同!
2020.06.23 更新 1 原则 美化之前,得先有一个目标对不对,笔者是一个喜欢简单的人,因此美化本着三大原则:简单,干净,整洁. 呃....好像很抽象的样子,上图吧.反正没图没真相. 怎么样,还 ...
- java面试一日一题:讲下在什么情况下会发生类加载
问题:请讲下在什么情况下会发生类加载? 分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载? 回答要点: 主要从以下几点去考虑 1.什么是类加载: 2 ...
- UI自动化测试框架:关键字驱动+数据驱动
1. 关键字驱动框架简介 2. 工程结构说明 3. 工程代码实现 action 包 page_action.py business_process 包 case_process.py data_so ...
- SLAM导航及控制部分,源码公布
欢迎Fork,觉得不错就点个小星星吧 ROS源码 https://github.com/ShieldQiQi/TX2_StereoSLAM STM32驱动板源码 https://github.com/ ...
- 关于CSS3背景渐变色无效问题
无效的css[linear-gradient]写法 .loginbox{ background-color: linear-gradient(#D0D0D0, #E0E0E0, white); wid ...
- XCTF-supersqli
supersqli 进来有个输入框,看内容应该是var_dump了sql查询结果 单引号有报错,万能语句能用,注释符#没被ban 打了个union select,给提示ban了一堆关键字,而且忽略大小 ...