美文网首页
2021-05-16 《Java 核心技术36讲》学习记录六

2021-05-16 《Java 核心技术36讲》学习记录六

作者: _笑口常开 | 来源:发表于2021-05-19 07:21 被阅读0次

    简述

    此文是对 第6讲 | 动态代理是基于什么原理? 的学习

    一些知识点/笔记点:

    • 动态类型与静态类型语言
    • 语言类型信息是在运行时检查,还是编译期检查。
    • 强类型和弱类型,就是不同类型变量赋值时,是否需要显式地(强制)进行类型转换。
    • Java 是静态的强类型语言,但是因为提供了类似反射等机制,也具备了部分动态类型语言的能力。
    • ==Java 反射机制==,是动态代理的一种
    • 通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性和方法,调用方法或者构造对象,甚至可以运行时修改类定义。
    • AOP 使用到了动态代理
    • 实现动态代理有很多方式,Java 反射是一种,利用传说中更高性能的字节码操作机制,类似 ASM、cglib(基于 ASM)、Javassist 等。
    • 反射机制内容及基本编程场景:Class、Field、Method、Constructor 等,这些完全就是我们去操作类和对象的元数据对应。
    • 反射提供的 AccessibleObject.setAccessible(boolean flag)。它的子类也大都重写了这个方法,这里的所谓 accessible 可以理解成修饰成员的 public、protected、private,这意味着我们可以在运行时修改成员访问限制!
    • 代理机制:代理模式,代理可以看作是对调用目标的一个包装,对目标代码的调用不是直接发生的,而是通过代理完成。
    • 代理实现解耦,不关注内部细节。
    • 静态代理发展到动态代理
    • Spring AOP 支持两种模式的动态代理,JDK Proxy 或者 cglib,cglib 方式对接口的依赖被克服了。
    • JDK Proxy 和 cglib 优势对比

    JDK Proxy 的优势:
    最小化依赖关系,减少依赖意味着简化开发和维护,JDK 本身的支持,可能比 cglib 更加可靠。
    平滑进行 JDK 版本升级,而字节码类库通常需要进行更新以保证在新版 Java 上能够使用。
    代码实现简单。
    基于类似 cglib 框架的优势:
    有的时候调用目标可能不便实现额外接口,从某种角度看,限定调用者实现接口是有些侵入性的实践,类似 cglib 动态代理就没有这种限制。
    只操作我们关心的类,而不必为其他相关类增加工作量。
    高性能。

    • AOP 的目的和能力,简单来说它可以看作是对 OOP 的一个补充,因为 OOP 对于跨越不同对象或类的分散、纠缠逻辑表现力不够,比如在不同模块的特定阶段做一些事情,类似日志、用户鉴权、全局性异常处理、性能监控,甚至事务处理等。

    Java 源码的学习

    可以参照之前的一篇文章:Java源码学习

    相关文章

      网友评论

          本文标题:2021-05-16 《Java 核心技术36讲》学习记录六

          本文链接:https://www.haomeiwen.com/subject/gucejltx.html