AOP


# AOP

# 前置知识

# 核心概念

  • 切面(Aspect):切面是一个横跨多个类的关注点的模块化。事务管理是一个典型的横切关注点。在 Spring AOP 中,切面可以使用普通类(基于模式的方法)或通过 @Aspect 注解修饰的类来实现。
  • 连接点(Join point):程序执行过程中的一个点。在 Spring AOP 中,某个方法执行前、执行后、抛出异常后等一些具有边界性质的特定点,称作连接点。
  • 通知/增强(Advice):在一个特定连接点上采取的动作。
  • 切点(Pointcut):某个特定的连接点就是切点(例如具有特定名称的方法)。
  • 引介(Introduction):是一种特殊的 Advice,它为类添加一些属性和方法,这样即使一个业务类原本没有实现某一接口,通过 AOP 的引介功能,也可以动态地为该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类。
  • 目标对象(Target object):增强逻辑的织入目标类。如果没有 AOP,那么目标业务类需要自己实现所有逻辑;如果使用 AOP,可以把一些非逻辑性代码通过 AOP 织入到主程序代码上。由于 Spring AOP 是使用运行时代理实现的,因此该对象将始终是一个代理对象。
  • AOP 代理(AOP proxy):AOP 框架为了实现切面增强而创建的对象。在 Spring 框架中,AOP 代理是 JDK 动态代理或 CGLIB 代理。
  • 织入(Weaving):是将增强添加到目标类具体连接点上的过程。

# Advice 类型

Spring 中的 Advice 有下面五种类型:

  • 前置增强(Before):在方法执行前调用。
  • 后置增强(AfterReturning):在方法执行后调用(方法正常结束,没有异常退出)。
  • 异常抛出增强(AfterThrowing):在方法抛出异常时调用。
  • 环绕增强(Around):在方法执行前后都调用。
  • 最终增强(After):在方法执行后执行(不管是正常退出还是异常退出)

# 常见场景

  • 日志记录:通过 AOP 可以在方法执行前后记录日志,方便跟踪和调试应用程序。
  • 事务管理:AOP 可以在方法执行前后进行事务的开启、提交或回滚,简化了事务管理的代码。
  • 安全性控制:通过 AOP 可以在方法执行前进行权限验证,确保只有具有相应权限的用户才能访问敏感数据或执行敏感操作。
  • 性能监控:AOP 可以在方法执行前后进行性能监控,如记录方法的执行时间、调用次数等,用于性能优化和瓶颈分析。
  • 异常处理:AOP 可以在方法执行过程中捕获异常,并进行统一的异常处理和错误日志记录。
  • 缓存管理:AOP 可以在方法执行前后进行缓存的读取和更新,提高系统的响应速度和性能。
  • 验证和校验:AOP 可以在方法执行前进行参数的验证和校验,确保输入的数据符合要求。
  • 消息通知:AOP 可以在方法执行前后发送消息通知,如发送邮件、短信等。

# 总结

AOP 通过将横切关注点与核心业务逻辑分离,提高了代码的可维护性和可重用性。

(完)