当前位置: 首页 > news >正文

六、设计模式-6.2、代理模式

6.2、代理模式

6.2.1、什么是代理?为什么要用动态代理?

答:
在Java中,代理是一种设计模式,其目的是在不修改原始对象的情况下,通过创建一个中间代理对象来控制对原始对象的访问。

动态代理是一种特殊类型的代理,它不需要预先编写代理类,而是在运行时动态生成代理对象Java中的动态代理是通过反射机制实现的

使用动态代理的主要原因是在不改变原始对象的情况下,提供额外的功能或行为。比如,可以在方法执行前后进行日志记录、权限管理、事务处理等。此外,动态代理还可以实现远程代理,将方法调用转发到远程服务器上的对象。

动态代理的好处是可以在运行时动态地增加、删除和修改代理类的行为,使得代码更加灵活和可扩展。它也能够减少重复的代码和提高代码的可重用性。

6.2.2、JDK动态代理为什么只能代理有接口的类?

答:
有接口的类就是实现了接口的类,JDK动态代理只能代理有接口的类,是因为JDK动态代理是基于接口实现的

JDK动态代理是通过创建一个实现代理接口的代理类,并通过反射调用被代理对象的方法。在代理类中,每个被代理的方法都会被重写,并在方法中调用InvocationHandler的invoke方法,实现了对被代理对象方法的增强

由于Java是单继承的语言,一个类只能继承一个父类,但可以实现多个接口。因此,JDK动态代理选择通过创建代理接口的实现类来实现代理的功能。代理对象可以实现多个接口,通过实现这些接口来实现代理对象和被代理对象的方法一一对应。

而对于没有实现接口的类,JDK动态代理无法实现以接口为基础的代理机制,因为没有接口可以作为代理类的基础。针对没有实现接口的类,可以使用其他代理框架,如CGLib,来实现动态代理。CGLib可以通过动态生成字节码,直接继承被代理类,从而实现对非接口类的代理。


http://www.mrgr.cn/news/37029.html

相关文章:

  • MCUboot 和 U-Boot区别
  • 数据库 - MySQL的事务
  • Python实现判别分析
  • c++继承详解
  • MySQL多版本并发控制MVCC实现原理
  • AIGAME背后的强大背景与AI币价值的崛起
  • np.array_fancy_indexing花式索引
  • 【解密 Kotlin 扩展函数】扩展属性与扩展函数类似(十九)
  • 阻塞型IO与非阻塞型IO
  • 【CSS/HTML】圣杯布局和双飞翼布局实现两侧宽度固定,中间宽度自适应及其他扩展实现
  • 嵌入式中CW32多功能测试笔实现
  • C语言指针系列1——初识指针
  • 解决毕业论文难题!推荐7款AI自动生成论文工具网站
  • C++11新特性—std:function模板类
  • 【C++位图】构建灵活的空间效率工具
  • Keyence_PL_MC_HslCommunication import MelsecMcNet
  • 【RabbitMQ】消息堆积、推拉模式
  • 【智能控制】第15章 智能优化算法,遗传算法
  • 【Linux】项目自动化构建工具-make/Makefile 详解
  • 代码随想录算法训练营第四十二天 | 188.买卖股票的最佳时机IV,309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费