Skip to content

Spring AOP知识点

基础概念

注解说明
Aspect切面,具体的可拔插组件功能类,通常一个切面只实现一个通用功能
Target Class/Method目标类,目标方法,指真正要执行与业务相关的方法
PointCut切入点,使用execution表达式说明切面要作用在系统的哪些类上
JoinPoint连接点,切面运行过程中是包含了目标类/方法元数据的对象
Advice通知,说明具体的切面的执行时机,Spring包含了五种不同类型通知

JoinPoint核心方法

注解说明
Object getTarget()获取ioc容器内目标对象
Signature getSignature()获取目标方法
Object[] getArgs()获取目标方法参数

PointCut切点表达式

示例: public void com.imooc.service.UserService.createUser(形参1,形参2) 对应: execution(public com.imooc .. . (..)) 解释: 修饰符 返回类型 包名..类名.方法名(..) 其中 是通配符,..是包通配符, (..) 是参数通配符。public可以省略

五种通知类型

注解说明
Before Advice前置通知,目标方法运行前执行
After Returning Advice返回后通知,目标方法返回数据后执行
After Throwing Advice异常通知,目标方法抛出异常后执行
After Advice后置通知,目标方法运行后执行
Around Advice最强大通知,自定义通知执行时机,可决定目标方法是否运行

特殊的“通知”--引介增强

  • 引介增强是对类的增强,而非方法
  • 引介增强允许在运行时为目标类增加新属性或方法
  • 引介增强允许在运行时改变类的行为,让类随运行环境动态变更

AOP实现原理

Spring基于代理模式实现功能动态扩展,包括两种形式:

  • 目标类拥有接口时,通过JDK动态代理实现功能扩展
  • 目标类没有接口时,通过CGLib组件实现功能扩展

苏ICP备20040768号