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


前言

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


文章目录

  • 前言
  • [1. 什么是spring AOP?](#1. 什么是spring AOP?)
  • [2. 实现spring AOP - 认识各种通知](#2. 实现spring 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 实现过程 定义切面 + 定义切点 + 定义通知

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

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

  • 定义通知:切点的方法名,写在通知参数中,用于识别是哪个切点的通知;(想了解具体的 百度 - AspectJ 语法)
c 复制代码
 //前置通知
    @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;
    }

总结

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

相关推荐
customer082 分钟前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
全栈开发圈4 分钟前
新书速览|Java网络爬虫精解与实践
java·开发语言·爬虫
WaaTong7 分钟前
《重学Java设计模式》之 单例模式
java·单例模式·设计模式
面试鸭9 分钟前
离谱!买个人信息买到网安公司头上???
java·开发语言·职场和发展
小白冲鸭39 分钟前
【报错解决】使用@SpringJunitConfig时报空指针异常
spring·java后端开发
沈询-阿里1 小时前
java-智能识别车牌号_基于spring ai和开源国产大模型_qwen vl
java·开发语言
AaVictory.1 小时前
Android 开发 Java中 list实现 按照时间格式 yyyy-MM-dd HH:mm 顺序
android·java·list
Yaml41 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
LuckyLay1 小时前
Spring学习笔记_27——@EnableLoadTimeWeaving
java·spring boot·spring