AOP学习理解

AOP:Aspect Oriented Programming (面向切面编程,面向方面编程),其实就是面向特定方法编程
应用场景:
⚪ 案例部分功能运行较慢,定位执行耗时较长的业务方法。例如此时需要统计每一个业务方法的执行耗时。
在这里插入图片描述
实现:动态代理是面向切面编程最主流的实现。而SpringAOP是Spring框架的高级技术,旨在管理bean对象的过程中,主要通过底层的动态代理机制,对特定的方法进行编程。

快速入门

1.导入依赖

在这里插入图片描述

2.编写AOP程序:针对特定方法根据业务逻辑进行编程

@Component 将该类交给容器管理
@Aspect 标识当前类不是普通类,是AOP类
@Around("execution(* com.itheima.service..(…)) 表示 com.itheima.service包下 ,后面第一个* 表示类名 第二个*表示方法名。即针对com.itheima.service包下所有的接口或类中所有的方法进行编程。
在这里插入图片描述

AOP核心概念

连接点:JoinPoint,可以被AOP控制的方法(暗含方法执行是的相关信息)

通知:Advice,指那些重复的逻辑,即反复使用的共性功能(例如统计每个方法执行的时间)。

切入点:PointCut,匹配连接点的条件,通知仅会在切入点方法执行时被应用。(简单理解:就是可以对哪些方法进行AOP切面编程, 例如:@Around("execution(* com.itheima.service..(…)) ,即针对com.itheima.service包下所有的接口或类中所有的方法进行编程)

目标对象:Target,通知所有应用的对象

AOP进阶

通知类型

1.@Around 此注解的通知方法在目标方法前、后都被执行

在这里插入图片描述

2.@Before 此注解的通知方法在目标方法 前 都被执行

在这里插入图片描述

3.@After 此注解的通知方法在目标方法 后 都被执行,无论是否有异常都会执行

在这里插入图片描述

4.@AfterReturning 此注解的通知方法在目标方法 后 都被执行,有异常不会执行

在这里插入图片描述

5.@AfterThrowing 此注解的通知方法发生异常后被执行

在这里插入图片描述

@PointCut:该注解的作用是将公共的切点表达式抽取出来,需要用到时引用该切点表达式即可。

在这里插入图片描述

切入点表达式

在这里插入图片描述

@annotation切入点表达式,用于匹配标识有 特定注解 的方法

获取连接点相关信息

在这里插入图片描述

切入点表达式—@annotation

@annotation切入点表达式,用于匹配标识有特定注解的方法

例子:

@annotation(com.itheima.anno.Log)
@Before("@annotation(com.itheima.anno.Log)")
public void before(){Log.info("before");}

步骤

1.自定义注解

@Retention(RetentionPolicy.RUNTIME)  //表示该注解运行时生效
@Target(ElementType.METHOD)   // 表示该注解可以生效的位置,方法处
public @interface MyLog{}

2.在方法上加入注解

@MyLog
@Override
public List<Dept> list(){
List<Dept> deptList = deptList.list();
return deptList;
}

3.切入点表达式

@Before("@annotation(com.itheima.aop.MyLog)")  //表示要匹配方法上加了MyLog注解的方法
public void before(){log.info("---");}
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值