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

六、设计模式-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.kler.cn/a/326250.html

相关文章:

  • 智能指针原理、使用和实现——C++11新特性(三)
  • Java爬虫(Jsoup)详解
  • 【配置后的基本使用】CMake基础知识
  • 3步实现贪吃蛇
  • JavaScript中如何使用Promise处理异步操作?
  • 传奇996_23——杀怪掉落,自动捡取,捡取动画
  • 鸿蒙 如何退出 APP
  • JSON字符串转换成对象
  • 嵌套的JSON字符串解析成Java对象
  • 瑜伽馆预约小程序,在线瑜伽课程预约系统
  • 希捷电脑硬盘好恢复数据吗?探讨可能性、方法以及注意事项
  • 1. 如何在服务器上租GPU跑实验 (以AutoDL为例) - 深度学习·科研实践·从0到1
  • C++ 机器人相关面试点
  • 清华大学开源视频转文本模型——CogVLM2-Llama3-Caption
  • 因果推断学习
  • Flink集群部署
  • 面试知识点总结篇四
  • 【渗透实战系列】|App渗透 ,由sql注入、绕过人脸识别、成功登录APP
  • 介绍我经常使用的两款轻便易用的 JSON 工具
  • 2024年第一批因AI失业的人,已经出现了
  • 【hot100-java】【寻找重复数】
  • springboot电影售票系统小程序—计算机毕业设计源码36991
  • C++那些事之内存优化
  • Matlab_与CANoe联合仿真方案基础环境搭建
  • 基于微信小程序的美食外卖管理系统
  • 南沙C++信奥赛陈老师解一本通题 1269:【例9.13】庆功会