spring 动态代理 原理
动态代理可以在不修改被代理对象源码的情况下,为代理对象添加其他的逻辑功能,可以使用继承和组合两种方式实现,但是那样如果被代理对象很多的情况下实现是不太可能的。
首先,新建一个类,实现InvocationHandler,在里面加上自己的逻辑
public class LogInterceptor implements InvocationHandler {
private Object target;//被代理对象public Object getTarget() {return target;}public void setTarget(Object target) {this.target = target;}private void beforeMethod(Method method){//自己添加的业务逻辑System.out.println(method.getName()+" start");}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {beforeMethod(method);//先调用自己的逻辑method.invoke(target, args);//然后调用被代理对象的方法return null;}
}
测试类:
@Testpublic void testProxy(){//首先新建一个被代理对象UserDAO userDAO = new UserDAOImpl();LogInterceptor interceptor = new LogInterceptor();//将被代理对象设置进去interceptor.setTarget(userDAO);//新建代理UserDAO userDAOProxy = (UserDAO)Proxy.newProxyInstance(userDAO.getClass().getClassLoader(), userDAO.getClass().getInterfaces(), interceptor);userDAOProxy.save(new User());userDAOProxy.delete();}
控制台输出:
save start
user saved!
delete start
user deleted
通过实验可以知道,这个userDAOProxy的类是$Proxy4,它实现了接口UserDAO,当它调用save(user)方法的时候,由于InvocationHandler的实现类interceptor已经传给它,在这个时候,它首先通过接口UserDAO取得其中的方法Method method = userDAO.getClass().getMethod(),然后调用自身的invoke()方法。
spring 动态代理 原理相关推荐
- Spring动态代理原理是什么?
动态代理的两种模式 jdk动态代理 //基于实现接口 Cglib动态代理 //基于方法的继承 ????????啥东西 这就不得不提到 静态代理了: 说得高大上,其实就是写一个增强类继承被增强 ...
- Spring的动态代理原理
Spring动态代理原理 Spring动态代理有两种:CGLIB动态代理和JDK动态代理. JDK动态代理可以代理接口,不能代理没有实现接口的类:而CGLIB通过字节码技术可以动态生成被代理类的子类, ...
- 深入理解Java Proxy和CGLIB动态代理原理
点击上方关注,每天进步一点点 动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译 ...
- Java Proxy和CGLIB动态代理原理
动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译时就确定了,而动态代理的代理关 ...
- 【Spring源码三千问】Spring动态代理:什么时候使用的 cglib,什么时候使用的是 jdk proxy?
Spring动态代理:什么时候使用的 cglib,什么时候使用的是 jdk proxy? 前言 版本约定 正文 例子测试 结论分析 proxyTargetClass 标识的校正 哪些接口不是 Reas ...
- 08.jdk动态代理原理
课程标题<jdk动态代理底层原理分析> 课程内容: 1.什么是代理模式 2.代理模式应用场景有哪些 3.代理模式实现方式有哪些 4.静态代理与动态代理区别 5.JDK动态代理原理分析 6. ...
- Java 动态代理原理图解 (附:2种实现方式详细对比)
动态代理在 Java 中有着广泛的应用,例如:Spring AOP 面向切面编程,Hibernate 数据查询.以及 RPC Dubbo 远程调用等,都有非常多的实际应用@mikechen 目录 Ja ...
- 从一个Spring动态代理Bug聊到循环依赖
文章目录 Bug复现 结论 @PostConstruct的在Bean的生命周期的哪一步 一般代理类的生成时机在生命周期的哪一步 解决办法 两个思路 1.不生成代理类 2.在生成代理类之后再进行数据的初 ...
- 深入理解JDK动态代理原理,使用javassist动手写一个动态代理框架
文章目录 系列文章索引 一.动手实现一个动态代理框架 1.初识javassist 2.使用javassist实现一个动态代理框架 二.JDK动态代理 1.编码实现 2.基本原理 (1)getProxy ...
最新文章
- 1024 程序员节专题论坛来袭,权威解读 MindSpore、CANN 5.0 特性和 HCIA MDC 开发者认证...
- 压缩视频 html5播放,将HTML5视频呈现为Canvas正在压缩图像
- linux批量修改压缩图片大小,linux shell批量压缩某个目录下图片大小
- css中padding和magin的区别
- 【工具收藏】golang 开发工具包,json、sql 转 struct
- ubuntu下面制作ubuntu系统启动盘(转载+自己整理)
- Fedora 20 安装试用体验全程讲解
- OAuth2.0学习(1-12)开源的OAuth2.0项目和比较
- 前端传递数组给后端,多个相同key,对应不同值
- python 贪吃蛇
- linux系统论文题目大全_linux毕业设计
- RTP传输JPEG图片到VLC实时播放(代码)
- 【2019/02/18测试T3】飘雪圣域
- Electron 安装报错 'Electron failed to install correctly'
- 六大任务赏金平台,带你深度参与区块链的发展
- TEB算法2-teb参数说明及调试小记
- 四川IT行业年社区—十大地方论坛
- intellij idea中插件的安装方法及推荐
- Postgresql:杀进程
- 赛迪智库 | 《中国5G区域发展指数白皮书》附下载
热门文章
- 在微信小程序上实现抽奖功能
- Arduino 眨眼睛(定时器版本)
- freeswitch实现监听、三方通话的两种方法
- word中使正文中的上标数字链接到参考文献
- 传输协议之ICMP详解
- 了解什么是unix时间戳
- 解决Python中加载sklearn人脸数据集出现的fetch_olivetti_faces HTTPError: HTTP Error : Forbidden
- 稀少珍贵的执行力首先要知道做什么。
- BI入门经典(转载)
- 河北linux学习,河北云课堂空中课堂登录平台2021最新版-河北云课堂平台登录平台预约v1.0.1-Linux公社...