AOP 笔记(二)

本文深入探讨了AOP代理的三种方式:手动代理包括JDK动态代理和CGLIB增强字节码,Spring半自动代理,以及Spring全自动AOP编程。对比了各种代理方式的特点,如JDK代理适用于接口+实现类,而CGLIB则更灵活,同时介绍了从手动到全自动编程过程中代码量和配置复杂度的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言
  1. 这篇博客主主要记录关于 AOP 代理的几种方式
  2. 由繁至简分:手动代理,半自动代理,全自动代理
二、手动代理(分两种)
2.1 JDK动态代理
  1. 前提:目标类必须是 接口 + 实现 类型,否则无法代理
  2. 创建目标类
    在这里插入图片描述
  3. 创建切面类
    在这里插入图片描述
  4. 创建工厂类
    在这里插入图片描述
  5. 创建测试类
    在这里插入图片描述
  6. 测试结果
    在这里插入图片描述
2.2 cglib 增强字节码
  1. 前提1:目标类可以是仅有实现类,也可以是接口 + 实现类,兼容两者
  2. 前提2:使用 cglib 必须导入依赖包 — spring-core-3.2.0.RC2.jar (版本不限)
  3. 切面类与上文共用
  4. 创建目标类(没有接口,直接实现类)
    在这里插入图片描述
  5. 工厂类(与上文公用一个类,但新建一个方法)
    在这里插入图片描述
  6. 创建测试类
    在这里插入图片描述
  7. 测试结果
    在这里插入图片描述
2.3 两者差异
  1. 使用情景不同:
    1. JDK 代理,目标类必须是接口 + 实现类格式
    2. Cglib 代理,既可以是仅接口,又可以是接口 + 实现格式
  2. 使用 cglib 时候,需要导入 cglib 所依赖的 jar 包
三、Spring编写代理半自动
  1. 前提:导包 — 核心4+1 、AOP联盟(规范)、spring-aop(实现)
    在这里插入图片描述

  2. 目标类与上文 JDK 手动代理共用

  3. 创建切面类
    在这里插入图片描述

  4. Spring 配置
    在这里插入图片描述

  5. 创建测试类
    在这里插入图片描述

  6. 测试结果
    在这里插入图片描述

四、Spring AOP全自动编程
  1. 前提:导包
    在这里插入图片描述
  2. 切面类对象和目标类对象与半自动共用
  3. 配置 beans.xml 文件
    在这里插入图片描述
  4. 创建测试类
    在这里插入图片描述
  5. 测试结果
    在这里插入图片描述
五、个人总结
  1. 可以从代码量很明显的发现,三者是由繁至简,一个比一个少
  2. 三者相比,需要手动配置的内容也越来越少
  3. 但是,不变的是对于目标类和切面类的声明都是必须可少的
好的,关于Spring AOP笔记源码讲解,我可以给你简单介绍一下。 Spring AOP是Spring框架中的一个重要模块,提供了基于代理AOP实现。AOP(Aspect Oriented Programming)面向切面编程,是一种编程思想,它通过将横切关注点与业务逻辑分离,使得系统的关注点更加清晰,代码更加简洁易懂,同时也提高了代码的可维护性可扩展性。 在Spring AOP中,切面(Aspect)是一个类,它包含了通知(Advice)切点(Pointcut)。通知是在切点上执行的操作,例如在方法执行前或执行后执行一些额外的逻辑。而切点则是一个表达式,用于匹配目标对象中的方法,从而确定哪些方法会被通知所影响。 Spring AOP提供了四种通知类型,分别是: 1. 前置通知(Before advice):在目标方法执行之前执行。 2. 后置通知(After returning advice):在目标方法执行之后执行,在目标方法没有抛出异常的情况下。 3. 异常通知(After throwing advice):在目标方法抛出异常后执行。 4. 最终通知(After advice):无论目标方法是否抛出异常,最终通知都会执行。 除了通知之外,Spring AOP还提供了环绕通知(Around advice),它可以在目标方法执行前执行后执行一些额外的逻辑,并且可以控制目标方法的执行。 在Spring AOP中,代理是通过JDK动态代理或者CGLIB字节码生成技术生成的。如果目标对象实现了接口,则使用JDK动态代理实现代理;如果目标对象没有实现接口,则使用CGLIB字节码生成技术实现代理。 在Spring AOP中,通知切点都可以使用注解的方式来声明。例如,使用@Aspect注解声明一个切面类,使用@Before、@After、@AfterReturning、@AfterThrowing@Around注解声明通知方法,使用@Pointcut注解声明切点表达式。 关于Spring AOP源码讲解,它的实现主要涉及到以下几个类: 1. AdvisedSupport类:封装了目标对象、切面通知等信息。 2. ProxyFactory类:用于生成代理对象的工厂类。 3. AopProxy接口:代理对象的接口。 4. JdkDynamicAopProxyCglibAopProxy类:实现了AopProxy接口,分别用于基于JDK动态代理CGLIB字节码生成技术的代理对象。 以上是Spring AOP笔记简单源码讲解,希望能对你有所帮助。如果有什么不清楚的地方,可以继续问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值