关于动态代理在面试中的一些问题

目录

说一下你对代理模式的理解吧

说一下jdk动态代理是这么实现的吧

如果又想代理类又想代理接口的话?

既然动态代理被你说的这么牛,那你平常工作中有使用到吗?


说一下你对代理模式的理解吧

代理的核心就是通过代理对象去访问实际的目标对象,比如我们生活中的租房问题,其中的中介就是代理模式的体现。代理类不仅能够实现目标对象,而且能添加一些额外的功能,比如在目标方法前后添加一些方法,这就类似于AOP的作用。Java中的代理模式主要分为静态代理和动态代理两大类。

静态代理:静态代理中对目标方法的增强都需要手动完成,是非常不灵活的,如果接口一旦新增方法,目标对象和代理对象都需要进行修改。静态代理还有一个缺点就是,在程序编译过程中就已经把接口,实现类,代理类这些都变成一个实际的.class文件,这就导致需要对每一个代理对象创建一个代理,当需要的代理对象很多的时候,就严重降低了代码的可维护性。因此就产生了动态代理,动态代理更加灵活。

动态代理:动态代理的代码不是写在代码里面,而是运行过程中产生,Java提供了两种实现动态代理的方法,分别是基于JDK的动态代理和Cglib动态代理,

动态代理的优点就是在运行时创建代理类,因此只需要写一个动态代理类就好。但是动态代理还有一个缺点就是只能代理接口,不能代理类吗?

说一下jdk动态代理是这么实现的吧

Jdk动态代理的核心接口是InvocationHandler ,和Proxy 类,Proxy类中使用频率最高的方法是newProxyInstance();这个方法主要是在程序运行期间生成代理类。

 

实现动态代理还需要实现一个接口:InvocationHandler ,来自定义处理逻辑 当我们动态代理调用一个方法的时候,这个方法的调用就会被转发到实现InvocationHandler 接口类的invoke 方法来调用。

 

 

如果又想代理类又想代理接口的话?

jdk动态代理就不合适了,就会用到cglib动态代理。

既然动态代理被你说的这么牛,那你平常工作中有使用到吗?

我日常开发中几乎是没有使用动态代理类的,但是我们使用的spring框架中的AOP就用到了动态代理,AOP通过动态代理实现了对方法的加强,比如最常见的前置通知和后置通知。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

仰望星空的鑫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值