动态代理可以在不修改被代理对象源码的情况下,为代理对象添加其他的逻辑功能,可以使用继承和组合两种方式实现,但是那样如果被代理对象很多的情况下实现是不太可能的。

首先,新建一个类,实现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 动态代理 原理相关推荐

  1. Spring动态代理原理是什么?

    动态代理的两种模式 jdk动态代理    //基于实现接口 Cglib动态代理   //基于方法的继承 ????????啥东西 这就不得不提到 静态代理了: 说得高大上,其实就是写一个增强类继承被增强 ...

  2. Spring的动态代理原理

    Spring动态代理原理 Spring动态代理有两种:CGLIB动态代理和JDK动态代理. JDK动态代理可以代理接口,不能代理没有实现接口的类:而CGLIB通过字节码技术可以动态生成被代理类的子类, ...

  3. 深入理解Java Proxy和CGLIB动态代理原理

    点击上方关注,每天进步一点点 动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译 ...

  4. Java Proxy和CGLIB动态代理原理

    动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译时就确定了,而动态代理的代理关 ...

  5. 【Spring源码三千问】Spring动态代理:什么时候使用的 cglib,什么时候使用的是 jdk proxy?

    Spring动态代理:什么时候使用的 cglib,什么时候使用的是 jdk proxy? 前言 版本约定 正文 例子测试 结论分析 proxyTargetClass 标识的校正 哪些接口不是 Reas ...

  6. 08.jdk动态代理原理

    课程标题<jdk动态代理底层原理分析> 课程内容: 1.什么是代理模式 2.代理模式应用场景有哪些 3.代理模式实现方式有哪些 4.静态代理与动态代理区别 5.JDK动态代理原理分析 6. ...

  7. Java 动态代理原理图解 (附:2种实现方式详细对比)

    动态代理在 Java 中有着广泛的应用,例如:Spring AOP 面向切面编程,Hibernate 数据查询.以及 RPC Dubbo 远程调用等,都有非常多的实际应用@mikechen 目录 Ja ...

  8. 从一个Spring动态代理Bug聊到循环依赖

    文章目录 Bug复现 结论 @PostConstruct的在Bean的生命周期的哪一步 一般代理类的生成时机在生命周期的哪一步 解决办法 两个思路 1.不生成代理类 2.在生成代理类之后再进行数据的初 ...

  9. 深入理解JDK动态代理原理,使用javassist动手写一个动态代理框架

    文章目录 系列文章索引 一.动手实现一个动态代理框架 1.初识javassist 2.使用javassist实现一个动态代理框架 二.JDK动态代理 1.编码实现 2.基本原理 (1)getProxy ...

最新文章

  1. 1024 程序员节专题论坛来袭,权威解读 MindSpore、CANN 5.0 特性和 HCIA MDC 开发者认证...
  2. 压缩视频 html5播放,将HTML5视频呈现为Canvas正在压缩图像
  3. linux批量修改压缩图片大小,linux shell批量压缩某个目录下图片大小
  4. css中padding和magin的区别
  5. 【工具收藏】golang 开发工具包,json、sql 转 struct
  6. ubuntu下面制作ubuntu系统启动盘(转载+自己整理)
  7. Fedora 20 安装试用体验全程讲解
  8. OAuth2.0学习(1-12)开源的OAuth2.0项目和比较
  9. 前端传递数组给后端,多个相同key,对应不同值
  10. python 贪吃蛇
  11. linux系统论文题目大全_linux毕业设计
  12. RTP传输JPEG图片到VLC实时播放(代码)
  13. 【2019/02/18测试T3】飘雪圣域
  14. Electron 安装报错 'Electron failed to install correctly'
  15. 六大任务赏金平台,带你深度参与区块链的发展
  16. TEB算法2-teb参数说明及调试小记
  17. 四川IT行业年社区—十大地方论坛
  18. intellij idea中插件的安装方法及推荐
  19. Postgresql:杀进程
  20. 赛迪智库 | 《中国5G区域发展指数白皮书》附下载

热门文章

  1. 在微信小程序上实现抽奖功能
  2. Arduino 眨眼睛(定时器版本)
  3. freeswitch实现监听、三方通话的两种方法
  4. word中使正文中的上标数字链接到参考文献
  5. 传输协议之ICMP详解
  6. 了解什么是unix时间戳
  7. 解决Python中加载sklearn人脸数据集出现的fetch_olivetti_faces HTTPError: HTTP Error : Forbidden
  8. 稀少珍贵的执行力首先要知道做什么。
  9. BI入门经典(转载)
  10. 河北linux学习,河北云课堂空中课堂登录平台2021最新版-河北云课堂平台登录平台预约v1.0.1-Linux公社...