Java外功精要——Spring AOP

Java外功精要——Spring AOP

Spring AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的核心特性之一,它能够帮助开发者将横切关注点(如日志、事务、安全等)与业务逻辑分离,提高代码的模块化程度和可维护性。

AOP核心概念
  1. 切面(Aspect): 横切关注点的模块化,如日志切面、事务切面
  2. 连接点(Join Point): 程序执行过程中的某个特定点,如方法调用、字段访问
  3. 通知(Advice): 切面在特定连接点执行的动作,分为前置、后置、环绕、异常、最终通知
  4. 切入点(Pointcut): 匹配连接点的断言,决定哪些连接点会被通知
  5. 引入(Introduction): 向现有类添加新方法或字段
  6. 目标对象(Target Object): 被一个或多个切面通知的对象
  7. AOP代理(AOP Proxy): Spring创建的代理对象,用于实现切面契约
  8. 织入(Weaving): 将切面应用到目标对象并创建代理对象的过程
Spring AOP通知类型
  • @Before: 目标方法执行前执行
  • @AfterReturning: 目标方法正常返回后执行
  • @AfterThrowing: 目标方法抛出异常后执行
  • @After: 目标方法执行后无论结果如何都执行(类似于finally)
  • @Around: 围绕目标方法执行,可控制方法执行时机
实现示例

下面是一个使用Spring AOP实现日志记录的示例:

切入点表达式详解

Spring AOP使用AspectJ的切入点表达式语言,基本格式:

代码语言:javascript

代码运行次数:0

运行

AI代码解释

execution(修饰符? 返回值 包名.类名.?方法名(参数) 异常?)

常用通配符:

  • ​*​​: 匹配任意字符,但只能匹配一个元素
  • ​..​​: 匹配任意字符,可以匹配多个元素,在类路径中表示当前包及其子包,在方法参数中表示任意参数
  • ​+​​: 匹配指定类及其子类

示例:

  • ​execution(* com.example.service.*.*(..))​​: 匹配service包下所有类的所有方法
  • ​execution(public * *(..))​​: 匹配所有公共方法
  • ​execution(* com.example.service.UserService+.*(..))​​: 匹配UserService及其子类的所有方法
Spring AOP的实现原理

Spring AOP默认使用动态代理实现:

  1. 当目标对象实现了接口时,使用JDK动态代理
  2. 当目标对象没有实现接口时,使用CGLIB代理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值