java面试题(杨晓峰)---第六讲谈谈动态代理是基于什么原理?
我在编译时不知道,而在运行时知道,那么肯定在运行时给了提示,这个提示就是额外功.好处是可以重复利用相同代码.
代理模式:通过代理静默的解决一些与业务无关的问题,例如远程,安全,事物,日志,资源关闭,...让应用开发者可以只关心自身业务.
静态代理:事先写好代码类,可以手工编写,也可以用工具生成.缺点是每个业务类都要有一个对应代理类,非常不灵活.
动态代理:运行时自动生成代理对象.缺点是生成代理对象和调用代理对象都要额外花费时间,
JDK动态代理:基于java反射机制实现,必须要实现了接口的业务类才能用这种办法生成代理对象.新版本也开始结合ASM机制.
cglib动态代理:基于ASM机制实现,通过生成业务类的子类作为代理类..
java反射机制的常见应用:动态代理(AOP,RPC),提供第三方开发者拓展能力(Servlet容器,JDBC连接),第三方组件创建对象(DI)...
反射与动态代理原理:
反射最大的作用之一就在于我们可以不在编译时知道某个对象的类型,而在运行时提供完整的"包名+类名.class"得到.注意:不在编译时,而是在运行时.
功能:
#在运行时能判断任意一个对象所属的类.
#在运行时能构造任意一个类的对象
#在运行时能获得任意一个类所具有的的成员变量和方法.
#在运行时调用任意一个对象的方法.简单说,利用java反射机制我们可以加载一个运行时才得知名称的class,获悉其构造方法,并生成其对象实体,能对其fields设置并唤起其methods.
应用场景:
反射技术常用在各类通用框架开发中.因为为了保证框架的通用性,需要根据配置文件加载不同的对象和类,并调用不同的方法,这个时候就会用到反射---运行时动态加载需要加载的对象.
特点:
由于反射会额外消耗一定的系统资源,因此如果不需要动态的创建一个对象,那么就不需要用反射.另外,反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题.
2动态代理
为其他对象提供一种代理以控制对这个对象的访问,在某种情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在两者之间起到中介的作用.所谓动态代理,就是实现阶段不用关心代理谁,而是在运行阶段才指定代理那个对象,如果是自己写代理类的方法就是静态代理(确定性).
组成要素:
(动态)代理模式主要涉及三个要素:
#1:抽象类接口
#2:被代理类(具体实现抽象接口的类)
#3:动态代理类:实际调用被代理类的方法和属性的类
实现方法:
实现动态代理的方法有很多,比如JDK自身提供的动态代理,就是主要利用了反射机制,还有其他的实现方式,比如利用字节码操作机制,类似ASM,CGLIB(基于ASM),Javassist等.
举例:常常采用JDK提供的动态代理接口InvocationHandler来实现动态代理类.
java面试题(杨晓峰)---第六讲谈谈动态代理是基于什么原理?的更多相关文章
- java面试题(杨晓峰)---第七讲谈谈int和integer有什么区别?
理解装箱和拆箱的过程. 对象由三部分组成:对象头,对象实例,对齐填充. 对象头:一般是十六个字节,分两部分,第一部分:哈希码,锁状态标志,线程持有的锁,偏向线程id,gc分代年龄等,第二部分是类型指针 ...
- java面试题(杨晓峰)---第八讲谈谈Vector,ArrayList,LinkedList有何区别?
Vector,ArrayList,LinkedList均为线性的数据结构,但是从现实方式与应用场景中又存在差别. 1 底层实现方式 ArrayList内部数组来实现,LinkedList内部采用双向链 ...
- java面试题(杨晓峰)---第四讲强引用、软引用、弱引用、幻想引用有什么区别?
在java语言中,除了原始数据类型的变量,其他所有都是所谓的引用类型,指向各种不同的对象,理解引用对于掌握java对象生命周期和JVM内部相关机制非常有帮助. 今天问题:强引用.软引用.弱引用.幻想引 ...
- Java 动态代理是基于什么原理
动态代理 ①动态代理概念理解 动态代理是一种方便运行时动态构建代理.动态处理代理方法调用的机制,很多场景都利用类似机制做到的,比如用来包装RPC调用.面向切面的变成(AOP) 实现动态代理的方式很多, ...
- java面试题(杨晓峰)---以面试题为切入点,有效提升你的java内功
java是一门历史悠久的编程语言,可以毫无争议的说,java是最主流的编程语言之一.全球有1200万以上的java程序猿以及海量的设备,还有无所不能的java生态圈. 我所知道的诸如阿里,京东,百度, ...
- Java反射机制剖析(三)-简单谈谈动态代理
通过Java反射机制剖析(一)和Java反射机制剖析(二)的学习,已经对反射有了一定的了解,这一篇通过动态代理的例子来进一步学习反射机制. 1. 代理模式 代理模式就是为其他对象提供一种代理来 ...
- java面试题(杨晓峰)---第二讲Exception和Error有什么区别?
本人总结: Exception和Error:正常问题和意外问题,以自行车举例:没气和爆胎. ①理解Throwable,Exception,Error的设计和分类. ②掌握哪些应用最广泛的子类, ③如何 ...
- java面试题(杨晓峰)---第一讲谈谈你对java平台的理解
本人总结: 面向对象(封装,继承,多态) 平台无关性(jvm运行,class文件) 语言(泛型,lambda) 类库(集合,并发,网络,io/nio) jre(java运行环境,JVM,类库) JDK ...
- java面试题(杨晓峰)---第五讲String、StringBuffer、StringBuilder有什么区别?
线程 字符 操作频繁度 1 String (1)String的创建机制 由于String在java世界中使用过于频繁,java为了避免在一个系统中产生大量重复的String对象,引入了字符串常量池,其 ...
随机推荐
- phpcms换域名细节
修改/caches/configs/system.php里面所有和域名有关的,把以前的老域名修改为新域名. 进入后台设置-->站点管理,对相应的站点的域名修改为新域名. 点击后台右上角的&quo ...
- 《Java多线程编程核心技术》读后感(十八)
线程中出现异常的处理 package Seven; public class MyThread extends Thread { @Override public void run() { Strin ...
- soap入门篇
摘自:http://blog.csdn.net/erica_1230/article/details/54982081 SOAP的全称是Simple Object Access Protocol,即简 ...
- 19个很有用的 JavaScript库推荐
流行的 JavaScript 库有jQuery,MooTools,Prototype,Dojo和YUI等,这些 JavaScript 库功能丰富,加上它们众多的插件,几乎能实现任何你需要的功能 然而需 ...
- CF360E Levko and Game【贪心+dijsktra】
先把所有边可动设为r[i]又这些边不是l就是r(如果想一个方向改变能更优的话就尽量多的改变),每次跑dijsktra,对于可动边(x,y),如果dis1[x]<=dis2[x],那么就把这条边改 ...
- 通过node.js读取html页面及其页面中引入的css样式
Node 是什么? Node 是一个基于Chrome V8 引擎的JavaScript 运行环境. Node 不是一种独立的语言.Node不是 JavaScript 框架, Node是一个除了浏览器之 ...
- hadoop是什么?新手自学hadoop教程【附】大数据系统学习教程
Hadoop是一个由Apache基金会所开发的分布式系统基础架构. Hadoop是一个专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式. Hadoop=HDFS(文件 ...
- MySql提示:The server quit without updating PID file(…)失败之解决办法(来源网络仅供参考)
1.可能是/usr/local/mysql/data/rekfan.pid文件没有写的权限 解决方法 :给予权限,执行 “chown -R mysql:mysql /var/data” “chmod ...
- 2017浙江工业大学-校赛决赛 XiaoWei的战斗力
Description XiaoWei沉迷RPG无法自拔,但是他的战斗力只有5,所以他决定氪金提升战斗力.XiaoWei购买了n个福袋.打开1个福袋后,有以下三种情况出现:1.获得屠龙宝刀,概率为p1 ...
- Net Core 分布式微服务框架
Jimu : .Net Core 分布式微服务框架介绍 https://www.cnblogs.com/grissom007/p/9291345.html 一.前言 近些年一直浸淫在 .Net 平台做 ...