spring--aop--01--基础概念

一、aop底层原理

底层原理:动态代理--jdk动态代理或cglib动态代理,其中jdk代理为spring默认使用(参考:设计模式--04--结构型--01--代理模式

spring中切换jdk代理与cglib代理:

1、默认使用jdk代理

2、切换为cglib代理的3种方式

  • xml配置中切换方式    <aop:config proxy-target-class="true"> </aop>
  • 注解切换方式         <aop:aspectj-autoproxy proxy-target-class="true" />
  • 配置类切换方式       @EnableAspectJAutoProxy(proxyTargetClass = true)

3、当jdk代理不可用时,仍自动切换为使用cglib代理

二、AOP术语

  1. 连接点:类里面的哪些方法可以被增强
  2. 切入点:实际被真正增强的方法
  3. 通知(增强):增强的逻辑部分
  4. 切面:把通知应用到切入点,是动作

通知类型:

  • 前置通知:切入点执行前的增强
  • 后置通知:方法正常执行、异常执行都会执行,类似finally(最终通知)
  • 环绕通知:目标方法执行前后都执行,包括异常时
  • 异常通知:切入点有异常的增强
  • 返回通知:方法返回后进行的增强--方法正常执行会执行,异常执行不会执行

三、AspectJ

3.1 Spring框架一般都是基于AspectJ实现AOP操作

          AspectJ不是Spring组成部分,独立AOP框架,一般把AspectJ和Spirng框架一起使用,进行AOP操作

3.2 基于AspectJ实现AOP的操作方式


(1)基于xml配置文件实现
或者
(2)基于注解方式实现(常用)

备注--spring实现aop需要映入的依赖(maven项目):

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>5.2.6.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>5.2.6.RELEASE</version>
</dependency>

四、切入点表达式

(1)切入点表达式作用:知道对哪个类里面的哪个方法进行增强
(2)语法结构:execution(权限修饰符 [返回类型] 类全路径 方法名称(参数列表) ),其中返回值类型可以不写

常见的切入点表达式举例:
举例1:对com.atguigu.dao.BookDao类里面的add进行增强execution(* com.atguigu.dao.BookDao.add(..))
举例2:对com.atguigu.dao.BookDao类里面的所有的方法进行增强execution(* com.atguigu.dao.BookDao.*(..))
举例3:对com.atguigu.dao包里面所有类,类里面所有方法进行增强execution(* com.atguigu.dao.*.*(..))

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值