Spring AOP

AOP

  • 概念在这里插入图片描述
  • 术语
  • * Aspect:切面,下面所有元素的集合,它是所有元素的载体,所有元组组成一个切面
    
  • * Join point:连接点,所需要被增强的方法,例如 login(),这个方法当被AOP增强时,这个方法就叫做连接点
    
  • * Advice:通知,增强方法相对于执行方法的执行时机(前?后?环绕?)
    
  • * Pointcut:切入点,是切入点的集合,比如某个类中存在 login()和logout(),它们都被某个AOP增强方法增强,那么他们两个都是切入点的元素,切入点表示的就是  增强方法应该从哪里进行切入,知道在哪里切入后,就可以进行增强
    
  • * Target:目标对象,当方法被增强时,肯定需要对象来调用这个方法,这个对象叫做目标对象。但AOP实际在增强时,会产生一个代理对象来替代目标对象来调用方法实现增强(调用原方法和增强方法)
    
  • * AOP proxy:代理对象
    
  • * Weaving:织入,连接点在将要调用时,会发生代理对象来代理目标对象来调用的情况,代理对象中存在可执行的方法包括目标对象的方法和增强方法,目标对象方法和增强方法组合在一起的过程叫做织入。
    
使用切面
  • 首先需要借助 AspectJ的语法,因此需要引入 AspectJ的依赖
    在这里插入图片描述

  • 在一个配置类上开启 AspectJ的语法
    在这里插入图片描述

  • 声明切点
    在这里插入图片描述

  • 声明通知
    在这里插入图片描述

  • 上面步骤完成后,当我们在调用 test.service下的所有方法时,就会先调用切点方法





  • 切点的声明语法
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

支持的切点表达式设计
  • execution:可以精确定义连接点为:包、方法

  • within:只能定义连接点:在包
    在这里插入图片描述

  • args:定义连接点为,如果方法包含指定的参数即是 连接点,不论包在哪儿
    在这里插入图片描述

  • && ! 等表达式
    在这里插入图片描述

  • @ 符号

    • @annotation:如果某个方法加了注解,例如加了@Xauv,那么连接点定义为方法加了@Xauv的
      在这里插入图片描述
  • 此时的注解是:@MyAnnotationn,只有加了 @MyAnnotationn的方法才是连接点
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    • @args:类似的,如果参数加了注解,那么@args对应的连接点为加了特定注解的
      在这里插入图片描述
  • * @within:表示类加了注解的,其方法才是连接点
    

在这里插入图片描述

  • * @target:这里指的时目标对象,当目标对象匹配时,也就是当目标对象类型是test.service.MyServiceImpl时,才会进行增强。也就是说,如果目标对象时  test.service.MyServiceImpl  那么就会对方法进行增强,如果目标对象不是 MyServiceImpl 那么就不能进行增强
    

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • * @this:指的是代理对象,下面这个例子指的是:当代理对象类型是test.service.MyService时,才会进行增强。如果是其他类,那么无法增强。
    

在这里插入图片描述在这里插入图片描述

  • target和this:其实他们是冲突的,如果匹配target就不能匹配this,反之同。因为 this 是 JDK代理,实现了接口。CGLIB是集成了目标对象的代理。
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

execution连接点的意义
  • execution 表达式由下面几个部分组成
  • * 修饰符(public protected ...),
    
  • * 返回类型,(int  void ...)
    
  • * 声明类型,(方法名类型 )
    
  • * 名称匹配,方法所在全路径名
    
  • * 抛出异常,抛出异常类型
    
  • 下面是详细表达式写法,其中带 ?的,可以写也可以不写
    在这里插入图片描述
  • 上面表达的是:
    在这里插入图片描述




环绕通知
  • 后置通知
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 环绕通知

  • * 当around和after同时存在,先执行around中的后置
    
  • * 当around和before同时存在,先执行around中的前置
    

在这里插入图片描述

  • 环绕增强可以在方法执行中改变参数执行
  • * 这里将方法的参数全都 加10
    

在这里插入图片描述

  • ProceedingJoinpoint 只能应用在 @Around 通知中
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值