浅谈SpringBoot的动态代理
一、动态代理是什么?
代理就是面向切面编程(AOP)的一种实现,白话讲就是代替别人打理事务,我们平时使用的Spring AOP就是面向切面编程的一种实现,而动态代理就是AOP的底层原理。
二、代理分类
静态代理:在程序运行前就已经存在的代理类的字节码文件,代理对象和真实对象的关系在运行前就已经确定了。
动态代理:代理类就是在程序运行期间由JVM通过反射机制动态的生成,所以不存在代理类的字节码文件,动态生成字节码文件对象,代理对象和真实对象的关系在程序运行时期才确定的。
三、动态代理的实现方式
针对有接口使用JDK动态代理,需要使用java.lang.reflect包中的Proxy类与 InvocationHandler 接口。
针对没有使用接口使用CGLIB或javassist组件。
四、两者区别
静态代理优点:
业务类只需要关注业务逻辑本身,保证了业务类的重要性。
把真实对象隐藏起来,保护真实对象
缺点:
代理对象的额某个接口只服务于某种类型的对象,谁需要谁就创建。
若需要代理的方法很多,则要为每一种方法都进行代理处理
若借口添加了一个方法,不仅仅只有实现类实现,代理类也需要实现
动态代理优点:
不需要手动区创建代理类
缺点:
真实类必须实现接口
对多个真实类代理的话,Spring配置较多
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!