步入正文:反射和动态代理的区别。

动态代理,代理,前面已经有一篇文章说了他们的用法,http://blog.csdn.net/wltsysterm/article/details/64437634。

我们也都知道,动态代理其实用到了反射。那么笔者还是想论述下初学者可能会进入的一个理解误区,因为我进入了,所以我就拿出来跟大家共享下。

误区:为啥用动态代理不用反射

1、网上其他论坛或者是博友已经有好多文章论述为啥使用动态代理,动态代理有什么作用。

笔者这边也简单的帮忙概括下:

1)动态代理,struts的拦截器用到,spring的aop用到,用动态代理可以增强委托类的方法,增强体现在:事物的统一控制,统一日志控制等

2)解耦:实际调用的是代理类,实现调用处和委托类解耦(我的理解是:实现同一日志调用和委托类解耦)

3)隐藏底层代码:只暴露出代理类给我们,委托类可以隐藏起来(这块内容有点牵强)

  比如有一些底层的代码,我们不想显示出源码,这个时候可以生成一个代理类,把这个代理类和要被调用的方法暴露出来,就可以实现调用委托类某个方法。

上面这些作用直接通过反射可以做到吗

好吧,答案是既可以又不可以。

下面附上笔者理解过程写的代码

String classfullpath = propertiesUtil.readValue(urlarr[0]);
Class c = Class.forName(classfullpath);//获取到委托类的类

        //实例化对象Object target = c.newInstance();                     //反射调用方法,并返回值Systerm.out.println("before say hello");//这边要求调用的方法的参数类型,参数个数都要知道Method action = c.getMethod(urlarr[1], new Class[]{String.class});obj = action.invoke(target , new Object[]{param});

Systerm.out.println(“after sya hello”);

看到这边大家觉得,好像可以产生统一日志的功能,但是其实不然,上面如果只是告诉我们委托类对象和要调用的方法,是不足以完成方法的调用,还需要参数类型和参数个数
,但是每个方法的参数类型和参数个数其实都是不一样的,所以这个实现是有点难处的。
总结,反射是不能直接坐到动态代理的功能的。

再说下动态代理,以cglib动态代理为例子,人家是通过子类调用父类实现方法调用。而且方法的调用是显示调用的,即调用哪个方法,这个方法的参数有哪些都是清楚的,所以人家重心其实还是放在方法增强功能上,通过写一个动态代理中介类,实现所有想要增强的委托类的方法增强,这点,单纯的反射是做不到的。


作者:独行侠_阿涛
来源:CSDN
原文:https://blog.csdn.net/wltsysterm/article/details/68921463
版权声明:本文为博主原创文章,转载请附上博文链接!

反射和动态代理的区别相关推荐

  1. 支撑Java框架的基础技术:泛型,反射,动态代理,cglib

    以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型,反射同时对于一些高级技术例如动态代理,cglib和字节码技术也需要掌握,下面就按章节来一一说清楚这些技术的核心部分,最后手写 ...

  2. Android APP热更新中的插件化(Hook技术:反射或动态代理),Demo (2)

    修改AAPT,资源分区,用于Android插件化- https://github.com/BaoBaoJianqiang/AAPT -- Android下的挂钩(hook)和代码注入(inject) ...

  3. java底层 —反射、动态代理

    java底层 -反射.动态代理和注解 1. 反射介绍 1.1 反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2 java的反射机制 java的反射机制是指在程序运行状态中,给 ...

  4. 死磕java底层(三)—反射、动态代理和注解

    1.反射介绍 1.1反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2java的反射机制 java的反射机制是指在程序运行状态中,给定任意一个类,都可以获取到这个类的属性和方法 ...

  5. Cglib和jdk动态代理的区别

    Cglib和jdk动态代理的区别 动态代理解决了方法之间的紧耦合, IOC解决了类与类之间的紧耦合! Cglib和jdk动态代理的区别? 1.Jdk动态代理:利用拦截器(必须实现InvocationH ...

  6. 通过反射创建动态代理对象(二)

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 将"通过反射创建动态代理对象(一)"合二为一 二.代码说明 package staticimpo ...

  7. MyBatis源码解析【4】反射和动态代理

    通过之前的介绍,我们了解了几个组件的生命周期. 它也是我们重要装备之一. 今天我们需要搞一件更加强的装备,叫做反射和动态代理. 如果没有这件装备的话,显然后面的源码boss是打不动的. 顺便说一下,下 ...

  8. Java提高班(六)反射和动态代理(JDK Proxy和Cglib)

    反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多.要怎么理解以上这句话,请看下文. 一.反射 反射机制是 Ja ...

  9. 通过反射创建动态代理对象(三)

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 传入目标对象和Advice(要执行的内容)对"通过反射创建动态代理对象(二)"进行改造(AOP框 ...

  10. android hook底层代码_Java-Hook技术-入门实践(反射、动态代理)-Hook拦截通知(当前App/Context)...

    老样子,上一篇MonkeyLei:Java-Hook技术-入门实践+反射.动态代理.热修复再看看 我们Hook学习了一下,一个是Java本地Main的实践练习. 一个是Android的监听事件的Hoo ...

最新文章

  1. 【资源共享】休眠唤醒 开发指南
  2. 看看人家那后端API接口写得,那叫一个巴适~,再看看我的,像坨屎!
  3. 中国互联网发展的两个瓶颈
  4. MyEclipse运行时自动保存
  5. C语言之加入头文件<stdbool.h>可以使用true和false
  6. trigger_name 的命名规范
  7. Cisco交换机路由器口令恢复
  8. php fpm子进程数配置,php-fpm进程管理方式以及子进程数量配置原则详解
  9. SQL语句的一些重要操作
  10. 斜齿轮重合度计算公式_斜齿齿轮传动中重合度计算的探讨
  11. 教你将视频作为背景添加到另一段视频中
  12. springboot + vue + FastDFS实现文件上传(支持预览)
  13. C++ 模板函数 二分查找
  14. 消息队列RabbitMQ入门与PHP实战
  15. 基于ESP32与OLED12864的主机状态监视器(MicroPython)
  16. pytorch 解决gpu训练只占一块卡
  17. JavaScript之移动端网页特效与本地存储(57th)
  18. Django--request 对象
  19. 看了这个,让你彻底明白什么网关、路由、DNS解析等
  20. 在andriod手机上video视频播放时自动置顶自动全屏的问题

热门文章

  1. mac下复制粘贴需要多次的问题
  2. 灵魂拷问:为什么5G路由器比2.4G路由器快?
  3. 计算机ppt里怎么应用背景图,如何快速生成一个PPT图片背景“遮罩”?-ppt背景图片怎么设置...
  4. 有高项(软考)证书,考PMP还要报培训班吗?
  5. html5图标用什么格式转换,ico转png 怎么把ico格式转换成png格式
  6. 图片批量转ico软件png批量转ico离线转换使用教程
  7. 如何HACK无线家用警报器?
  8. 企业级无线无缝漫游之思创漫游3.0 Plus ,三层漫游
  9. MAC 安装 kafka
  10. qpython3下载不了_qpython3手机版