【Java面试条记:基础】6.动态署理是基于什么原理?

打印 上一主题 下一主题

主题 1678|帖子 1678|积分 5034

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 反射机制



  • 界说:反射是 Java 语言提供的一种基础功能,允许步伐在运行时自省(introspect),直接操纵类或对象。
  • 功能:

    • 获取类界说、属性和方法。
    • 调用方法或构造对象。
    • 运行时修改类界说。

  • 应用场景:

    • O/R Mapping 框架:通过反射自动天生 setter 和 getter,简化数据加载和持久化。
    • 绕过 API 访问控制:使用反射绕开访问限制,例如释放 DirectBuffer。

  • 限制:Java 9 引入模块化体系后,对反射访问举行了限制,必要显式声明模块间的访问权限。
2. 动态署理



  • 界说:动态署理是一种运行时动态构建署理对象、处理署理方法调用的机制。
  • 应用场景:

    • 包装 RPC 调用。
    • 面向切面编程(AOP)。

  • 实现方式:

    • JDK 动态署理:基于反射机制实现,要求目的对象实现接口。
    • cglib 动态署理:基于字节码操纵机制(如 ASM)实现,通过创建目的类的子类来实现署理。

3. JDK 动态署理



  • 上风:

    • 最小化依靠关系,淘汰开发和维护工作量。
    • 平滑举行 JDK 版本升级。
    • 实现简单。

  • 限制:以接口为中心,要求目的对象实现接口,实用范围有限。
4. cglib 动态署理



  • 上风:

    • 不依靠接口,实用于没有实现接口的目的对象。
    • 高性能。

  • 实现方式:通过创建目的类的子类实现署理。
5. 动态署理 vs CGLIB

特性动态署理CGLIB署理方式基于接口基于类继承性能反射调用较慢通过ASM天生字节码,性能更高依靠JDK原生支持必要引入第三方库方法限制只能署理接口方法可署理类中的非final方法 6. 选择动态署理实现的依据



  • 可靠性:JDK 动态署理更加可靠,由于它是 JDK 自带的功能。
  • 可维护性:JDK 动态署理的代码实现简单,易于维护。
  • 性能:虽然 cglib 在某些场景下性能更高,但在大多数环境下,JDK 动态署理的性能已经充足。
  • 实用性:如果目的对象实现了接口,优先选择 JDK 动态署理;如果没有实现接口,可以思量 cglib。
7. AOP 与动态署理



  • AOP(面向切面编程):通过动态署理机制,将通用逻辑(如日志、事件、安全等)与业务逻辑分离,提高代码的抽象水平和复用度。
  • 应用场景:日志记录、事件管理、用户鉴权、性能监控等。
8. 总结



  • 反射机制:赋予了 Java 语言运行时自省的本领,是动态署理的基础。
  • 动态署理:通过署理机制,可以优雅地解决繁琐的重复编程题目,广泛应用于 RPC、AOP 等场景。
  • 实现方式:JDK 动态署理和 cglib 动态署理各有上风,选择时必要综合思量可靠性、可维护性、性能和实用性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表