分析&回答
什么是反射机制
在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的功能称为java的反射机制。
反射的使用
jdk提供了三种方式获取一个对象的Class,就User user来说
- user.getClass(),这个是Object类里面的方法
- User.Class属性,任何的数据类型,基本数据类型或者抽象数据类型,都可以通过这种方式获取类
- Class.forName(""),Class类提供了这样一个方法,让我们通过类名来获取到对象类
反射作用总结就是: - 动态地创建类的实例,将类绑定到现有的对象中,或从现有的对象中获取类型。
- 应用程序需要在运行时从某个特定的程序集中载入一个特定的类。
什么是代理模式
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
什么是静态代理
顾名思义,就是提前创建好代理类文件并在程序运行前已经编译成字节码。通俗点将就是自己手写一个固定代理类。
什么是动态代理
是指在运行时动态生成代理类,即代理类的字节码将在运行时生成并载入到ClassLoader中。常见利用java反射机制,动态的生成了一个代理类,直接使用代理方法。
反思&扩展
动态代理的方式
- JDK动态代理:利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。
- CGLIB动态代理:利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。
- ASM:低级字节码生成工具,近乎使用bytecode编码,对开发人员要求最高。当然性能也是最好。
JDK动态代理和CGLIB字节码生成的区别?
- JDK动态代理只能对实现了接口的类生成代理,而不能针对类。
- CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!