反射和动态代理的区别
步入正文:反射和动态代理的区别。
动态代理,代理,前面已经有一篇文章说了他们的用法,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
版权声明:本文为博主原创文章,转载请附上博文链接!
反射和动态代理的区别相关推荐
- 支撑Java框架的基础技术:泛型,反射,动态代理,cglib
以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型,反射同时对于一些高级技术例如动态代理,cglib和字节码技术也需要掌握,下面就按章节来一一说清楚这些技术的核心部分,最后手写 ...
- Android APP热更新中的插件化(Hook技术:反射或动态代理),Demo (2)
修改AAPT,资源分区,用于Android插件化- https://github.com/BaoBaoJianqiang/AAPT -- Android下的挂钩(hook)和代码注入(inject) ...
- java底层 —反射、动态代理
java底层 -反射.动态代理和注解 1. 反射介绍 1.1 反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2 java的反射机制 java的反射机制是指在程序运行状态中,给 ...
- 死磕java底层(三)—反射、动态代理和注解
1.反射介绍 1.1反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2java的反射机制 java的反射机制是指在程序运行状态中,给定任意一个类,都可以获取到这个类的属性和方法 ...
- Cglib和jdk动态代理的区别
Cglib和jdk动态代理的区别 动态代理解决了方法之间的紧耦合, IOC解决了类与类之间的紧耦合! Cglib和jdk动态代理的区别? 1.Jdk动态代理:利用拦截器(必须实现InvocationH ...
- 通过反射创建动态代理对象(二)
2019独角兽企业重金招聘Python工程师标准>>> 一.概述 将"通过反射创建动态代理对象(一)"合二为一 二.代码说明 package staticimpo ...
- MyBatis源码解析【4】反射和动态代理
通过之前的介绍,我们了解了几个组件的生命周期. 它也是我们重要装备之一. 今天我们需要搞一件更加强的装备,叫做反射和动态代理. 如果没有这件装备的话,显然后面的源码boss是打不动的. 顺便说一下,下 ...
- Java提高班(六)反射和动态代理(JDK Proxy和Cglib)
反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多.要怎么理解以上这句话,请看下文. 一.反射 反射机制是 Ja ...
- 通过反射创建动态代理对象(三)
2019独角兽企业重金招聘Python工程师标准>>> 一.概述 传入目标对象和Advice(要执行的内容)对"通过反射创建动态代理对象(二)"进行改造(AOP框 ...
- android hook底层代码_Java-Hook技术-入门实践(反射、动态代理)-Hook拦截通知(当前App/Context)...
老样子,上一篇MonkeyLei:Java-Hook技术-入门实践+反射.动态代理.热修复再看看 我们Hook学习了一下,一个是Java本地Main的实践练习. 一个是Android的监听事件的Hoo ...
最新文章
- 【资源共享】休眠唤醒 开发指南
- 看看人家那后端API接口写得,那叫一个巴适~,再看看我的,像坨屎!
- 中国互联网发展的两个瓶颈
- MyEclipse运行时自动保存
- C语言之加入头文件<stdbool.h>可以使用true和false
- trigger_name 的命名规范
- Cisco交换机路由器口令恢复
- php fpm子进程数配置,php-fpm进程管理方式以及子进程数量配置原则详解
- SQL语句的一些重要操作
- 斜齿轮重合度计算公式_斜齿齿轮传动中重合度计算的探讨
- 教你将视频作为背景添加到另一段视频中
- springboot + vue + FastDFS实现文件上传(支持预览)
- C++ 模板函数 二分查找
- 消息队列RabbitMQ入门与PHP实战
- 基于ESP32与OLED12864的主机状态监视器(MicroPython)
- pytorch 解决gpu训练只占一块卡
- JavaScript之移动端网页特效与本地存储(57th)
- Django--request 对象
- 看了这个,让你彻底明白什么网关、路由、DNS解析等
- 在andriod手机上video视频播放时自动置顶自动全屏的问题
热门文章
- mac下复制粘贴需要多次的问题
- 灵魂拷问:为什么5G路由器比2.4G路由器快?
- 计算机ppt里怎么应用背景图,如何快速生成一个PPT图片背景“遮罩”?-ppt背景图片怎么设置...
- 有高项(软考)证书,考PMP还要报培训班吗?
- html5图标用什么格式转换,ico转png 怎么把ico格式转换成png格式
- 图片批量转ico软件png批量转ico离线转换使用教程
- 如何HACK无线家用警报器?
- 企业级无线无缝漫游之思创漫游3.0 Plus ,三层漫游
- MAC 安装 kafka
- qpython3下载不了_qpython3手机版