认识 spring AOP (面向切面编程) - springboot


前言

本篇介绍什么是spring AOP, AOP的优点,使用场景,spring AOP的组成,简单实现AOP 并 了解它的通知;如有错误,请在评论区指正,让我们一起交流,共同进步!



本文开始

1. 什么是spring AOP?

AOP: 面向切面编程,也就是面向某一类编程,对某一类事情进行统一处理;

spring AOP: 是实现了AOP这种思想的一个框架;

AOP优点:

  • 减少重复代码:对一类同样的工作统一处理;
  • 提高开发效率:同上;

spring AOP 使用场景

使用:统一用户登录判断; 统一异常处理; 统一日志等等;

认识AOP的组成

  • 切面- Aspect:AOP定义的是一个事件;例如:登录操作的整个过程;- 某个具体功能实现的过程 - 一共类;
  • 切点 - Pointcut:AOP定义的具体规则;例如:验证登录的 方法;- 实现功能的方法 (设置拦截规则,满足规则的被拦截)
  • 连接点 - Join Point:可能触发切点的所有点;- 可能调用功能的某个方法的点;(应用程序执行时被拦截的点,方法定义,执行,异常抛出等)
  • 通知 - Advice:AOP具体执行的方法-必须完成的工作;例如:方法的具体实现;- 代码具体实现 - 类中方法的具体实现;(通知-控制器被拦截后,执行的具体方法)
    ① 前置通知 @Before
    ② 后置通知 @After
    ③ 环绕通知 @Around
    ④ 异常通知 @AfterThrowing
    ⑤ 返回通知 @AfterReturning

通知执行的顺序:环绕通知之前 > 前置通知 > 方法 > 方法返回后通知 > 后置通知 > 环绕通知之后

在这里插入图片描述

2. 实现spring AOP - 认识各种通知

2.1 在springboot项目中,原有依赖 + 添加spring AOP 依赖

2.2 实现过程 定义切面 + 定义切点 + 定义通知

  • 定义切面 -> 定义类
@Aspect // 定义切面
@Component //随框架启动,注入到容器中
public class UserAspect {
	//定义切点 + 通知...
}
  • 定义切点 -> 定义方法
//定义切点, 对UserController进行拦截
    @Pointcut("execution(* com.example.demo.controller.UserController.*(..))")
    public void pointcut() {
    }//空方法:方法名用于标识

切点表达式:识别该包下类下的任意方法,参数不限;

在这里插入图片描述

  • 定义通知:切点的方法名,写在通知参数中,用于识别是哪个切点的通知;(想了解具体的 百度 - AspectJ 语法)
 //前置通知
    @Before("pointcut()")
    public void doBefore() {
        System.out.println("执行前置通知!");
    }
//后置通知
    @After("pointcut()")
    public void doAfter() {
        System.out.println("执行后置通知!");
    }
//后置返回后的通知
    @AfterReturning("pointcut()")
    public void doAfterReturn() {
        System.out.println("执行返回后通知!");
    }//抛出异常后通知
    @AfterThrowing("pointcut()")
    public void doAfterThrow() {
        System.out.println("执行抛异常后的通知!");
    }
//环绕通知
    //使用环绕通知:例如:统计时间,就可以使用环绕通知,将通知前 与 通知后 放在一起
    @Around("pointcut()") //ProceedingJoinPoint:获取连接点;执行 =》返回框架,执行
    public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("执行环绕通知之前!");
        Object result = joinPoint.proceed();
        System.out.println("执行环绕通知之后");
        return result;
    }

总结

✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值