谈谈对反射和动态代理的理解?

分析&回答


什么是反射机制

在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的功能称为java的反射机制。

反射的使用

jdk提供了三种方式获取一个对象的Class,就User user来说

  1. user.getClass(),这个是Object类里面的方法
  2. User.Class属性,任何的数据类型,基本数据类型或者抽象数据类型,都可以通过这种方式获取类
  3. Class.forName(“”),Class类提供了这样一个方法,让我们通过类名来获取到对象类
    反射作用总结就是:
  4. 动态地创建类的实例,将类绑定到现有的对象中,或从现有的对象中获取类型。
  5. 应用程序需要在运行时从某个特定的程序集中载入一个特定的类。

什么是代理模式

代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

什么是静态代理

顾名思义,就是提前创建好代理类文件并在程序运行前已经编译成字节码。通俗点将就是自己手写一个固定代理类。

什么是动态代理

是指在运行时动态生成代理类,即代理类的字节码将在运行时生成并载入到ClassLoader中。常见利用java反射机制,动态的生成了一个代理类,直接使用代理方法。

反思&扩展


动态代理的方式

  • JDK动态代理:利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。
  • CGLIB动态代理:利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。
  • ASM:低级字节码生成工具,近乎使用bytecode编码,对开发人员要求最高。当然性能也是最好。

JDK动态代理和CGLIB字节码生成的区别?

  • JDK动态代理只能对实现了接口的类生成代理,而不能针对类。
  • CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法。

喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵呜刷题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值