(随笔)静态代理和动态代理

静态代理:

  • 在编译阶段就已经确定代理类和真实对象的关系。
  • 代理类需要手动编写或生成,为每个真实对象单独创建一个代理类。
  • 在代理类中可以添加额外的逻辑,如校验、日志等,增强功能。
  • 维护需对代理类和真实对象的修改,增加代码维护成本。
  • 在代理类和真实对象之间存在静态关联。

动态代理:

  • 在运行时通过反射机制动态生成代理类,无需手动编写代理类。
  • 代理类通过实现 InvocationHandler 接口,并重写 invoke 方法来实现对真实对象的代理逻辑。
  • 可以代理任意对象,无需为每个真实对象创建单独的代理类。
  • 在调用代理对象的方法时,会动态调用 invoke 方法,可以在此方法中添加额外的逻辑。
  • 可以实现动态添加、删除、替换代理逻辑,较为灵活。

区别

静态代理适合于需要对真实对象进行固定的增强逻辑,而动态代理适用于需要在运行时动态决定增强逻辑的场景。动态代理可以通过 Java 提供的 Proxy 类和相关接口(如 InvocationHandler)来实现,或者使用第三方库(如 CGLIB、Byte Buddy)来生成代理类。

需要注意的是,动态代理的实现相对较复杂,运行时生成代理类需要一定的性能开销。因此,在一些性能敏感的场景下,可能需要谨慎选择使用动态代理。

posted @   Joseph·Jonardo  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示