spring aop 使用简介

本片博客主要介绍springboot中aop的使用,用过Spring框架的都知道,aop是spring框架的两大核心功能之一,还有一个就是ioc,下面我们就springboot中如何引入aop来做一下探讨

引入AOP依赖包后,一般来说并不需要去做其他配置,使用过Spring注解配置方式的人会问是否需要在程序主类中增加@EnableAspectJAutoProxy来启用,实际并不需要。

因为在AOP的默认配置属性中,spring.aop.auto属性默认是开启的,也就是说只要引入了AOP依赖后,默认已经增加了@EnableAspectJAutoProxy

Springboot中有关AOP相关的自动配置包为:AopAutoConfiguration

相关注解

  • @Component 将当前类注入到Spring容器内

  • @Aspect :表明是一个切面类

  • @Before :前置通知,在方法执行之前执行

  • @After :后置通知,在方法执行之后执行

  • @AfterRuturning :返回通知,在方法返回结果之后执行

  • @AfterThrowing :异常通知,在方法抛出异常之后执行

  • @Around :环绕通知,围绕着方法执行

  • @Pointcut :切入点,PointCut(切入点)表达式有很多种,其中execution用于使用切面的连接点。

注意:

上面所提到的五种通知方法中,除了环绕通知外,其他的四个通知注解中,加或者不加参数JoinPoint都可以,如果有用到JoinPoint的地方就加,用不到就可以不加。

JoinPoint:里包含了类名、被切面的方法名,参数等属性。

环绕通知:参数必须为ProceedingJoinPoint,pjp.proceed相应于执行被切面的方法。

返回通知:可以加returning = “XXX”,XXX即为被切入方法的返回值,本例中是controller类中方法的返回值。

异常通知:可以加throwing = “XXX”,供读取异常信息。

返回通知和异常通知只会执行一个,如果产生异常,返回通知就不执行,后置通知一定会执行

环绕通知一般单独使用,环绕通知可以替代上面的四种通知,后面单独介绍。

相关概念

  • Joinpoint(连接点):所谓连接点是指那些被拦截到的点,在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点,通俗的说就是被增强类中的所有方法

  • PointCut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义,通俗的说就是被增强类中的被增强的方法,因为被增强类中并不是所有的方法都被代理了

  • Advice(通知/增强):所谓通知是指拦截到 Joinpoint (被增强的方法)之后所要做的事情就是通知,通俗的说就是对被增强的方法进行增强的代码

通知的类型:前置通知,返回通知,异常通知,后置通知,环绕通知
 前置通知:在被代理方法执行之前执行
 返回通知:在被代理方法执行之后执行
 异常通知:在被代理方法执行出错的时候执行
 后置通知:无论怎样都会执行
 注意:返回通知和异常通知只能有一个会被执行,因为发生异常执行异常通知,然后就不会继续向下执行,自然后置通知也就不会被执行,反之亦然。
  • Aspect(切面):是切入点和通知(引介)的结合,通俗的说就是建立切入点和通知方法在创建时的对应关系

实际测试顺序

环绕前通知》前置通知》原始方法》环绕后通知(抛异常时没有)》后置通知》返回通知/异常通知
@within:@Before通知方法的myAnnotation参数指的是调用方法所在的类上面的注解,就是这个方法是在哪个类上定义的

@target:@Before通知方法的myAnnotation参数指的是调用方法运行时所属于的类上面的注解

@within和@target的所得到实际注解的区别
| | @within | @target |

| — | — | — |

| 父类方法 | 父类注解 | 父类注解 |

| 子类不重写方法 | 父类注解 | 子类注解 |

| 子类重写方法 | 子类注解 | 子类注解 |

原文链接:https://blog.csdn.net/weixin_45583303/article/details/118565966

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值