JDK动态代理机制(AOP)

279 阅读5分钟

这是我参与 8 月更文挑战的第 15 天,活动详情查看: 8月更文挑战

👨‍🎓作者:Java学术趴

🏦仓库:GithubGitee

✏️博客:CSDN掘金InfoQ云+社区

💌公众号:Java学术趴

🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。

🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。

☠️每日毒鸡汤:你羡慕的生活都是你没熬过的苦

👋大家好!我是你们的老朋友Java学术趴,今天给大家分享JDK动态代理(AOP)。

JDK动态代理(AOP)

1. 代理模式

  • 代理模式是指,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下, 一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户类和目标对象之 间起到中介的作用。

  • 句话说,使用代理对象,是为了在不修改目标对象的基础上,增强主业务逻辑。 客户类真正的想要访问的对象是目标对象,但客户类真正可以访问的对象是代理对象。

2.代理模式作用

  • 控制访问 :在代理中,控制时否可以调用目标对象的方法。
  • 增强功能 :可以在完成目标对象的调用时,附加一个额外饿功能,这里添加的额外语句叫做功能增强。

3.代理模式的分类

  • 静态代理 :代理类是手工实现的java文件,同时代理的目标是规定好的。
  • 动态代理 :使用反射机制,在程序的执行中,创建代理类对象。

3.1 静态代理

  • 静态代理是指,代理类在程序运行前就已经定义好.java 源文件,其与目标类的关系在 程序运行前就已经确立。在程序运行前代理类已经编译为.class 文件。

3.2静态代理的缺点

  • 代码复杂,难于管理

    代理类和目标类实现了相同的接口,每个代理都需要实现目标类的方法,这样就出现了大量的代 码重复。如果接口增加一个方法,除了所有目标类需要实现这个方法外,所有代理类也需要实现 此方法。增加了代码维护的复杂度。

  • 代理类依赖目标类,代理类过多

    代理类只服务于一种类型的目标类,如果要服务多个类型。势必要为每一种目标类都进行代理, 静态代理在程序规模稍大时就无法胜任了,代理类数量过多。当接口改变时,影响的目标类与代理类比较多,都需要进行改动。

3.3 静态代理的优点

  • 容易理解,使用方便。

3.4 动态管理

  • 动态代理是指代理类对象在程序运行时由 JVM 根据反射机制动态生成的。动态代理不 需要定义代理类的.java 源文件。
  • 动态代理其实就是 jdk 运行期间,动态创建 class 字节码并加载到 JVM。
  • 动态代理使用jdk的反射机制,创建对象的能力,创建的是代理类的对象。而不是用你创建的类文件。不用写Java文件。

3.6 动态代理的实现方式

  • JDK动态代理(理解) :使用Java反射包中的类和接口实现动态代理的功能。

    **注意:JDK代理中,目标类必须存在接口,但是在CGLIB中目标类可以不存在接口。

    反射包:java.lang.reflect ,里面有三个类:InvocationHandler、Method 、Proxy
    
  • CGLIB 动态代理(了解) :

    CGLIB(Code Generation Library)是一个开源项目。是一个强大的,高性能,高质量的 Code 生成类 库,它可以在运行期扩展 Java 类与实现 Java 接口。它广泛的被许多 AOP 的框架使用,例如 Spring AOP。 使用 JDK 的 Proxy 实现代理,要求目标类与代理类实现相同的接口。若目标类不存在 接口,则无法使用该方式实现。 但对于无接口的类,要为其创建动态代理,就要使用 CGLIB 来实现。CGLIB 代理的生成 原理是生成目标类的子类,而子类是增强过的,这个子类对象就是代理对象。所以,使用 CGLIB 生成动态代理,要求目标类必须能够被继承,即不能是 final 的类。 cglib 经常被应用在框架中,例如 Spring ,Hibernate 等。Cglib 的代理效率高于 Jdk。对 于 cglib 一般的开发中并不使用。做了一个了解就可以

3.5 动态代理的优点

  • 不用创建代理类文件,代理的目标类是活动的,可设置的。
  • 可以动态的给不同的目标创建代理。

4.JDK动态代理

  • 反射:Method类,表示方法。类中的方法,通过Method可以执行某个方法。

4.1 InvocationHandler 接口

4.2 Method 类

4.3 Proxy 类

此时这个 Object就相当于静态代理对象taobao

5.JDK实现动态代理的步骤

6.JDK动态代理执行流程

7.动态代码能做什么

-------💘看完的大佬们可以关注一下小编,会一直更新小技巧,免费分享给大家呦!!!💝----- 今天就先分享到这里,明天继续给大家分享,关注不迷路呦,我们明天见😊。