Spring系列(八) --- 详述 SpringAOP--面向切面编程的相关概念及基本操作

这篇具有很好参考价值的文章主要介绍了Spring系列(八) --- 详述 SpringAOP--面向切面编程的相关概念及基本操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

AOP 其实就是针对程序中的某一个类或者某一个功能做统一的处理, 如针对登录功能在前后端之间可以做一些验证操作, 验证用户名或者密码是否正确.

♞ 相关概念

  • 切面: AOP 主要是针对的某一个功能进行的操作或者定义, 而这个功能就称之为是一个切面, 如用户登录功能, 这就是一个切面;
  • 切点: 切点是切面中的一个方法, 或者说是定义 AOP 拦截的规则; 如果切面是一个数据库的话, 那么切点就是数据库中的表;
  • 连接点: 所有可能触发 AOP 的都可以称之为连接点; 主要用来匹配切面中的多个点, 如果说切点是表的话, 那么连接点就相当于是表中的一行行的数据;
  • 通知: 规定 AOP 执行的时机和执行的方法.

举个例子: 针对用户的登录功能进行校验, 这个用户功能就是一个切面, 可能用户登录的验证需要在多个页面进行校验, 那么这多个页面就相当于是连接点; 当调用用户的登录验证方法时, 整个验证方法就是一个切点, 而方法体就是通知.
Spring系列(八) --- 详述 SpringAOP--面向切面编程的相关概念及基本操作

♞♞ 具体操作步骤

第一步: 添加 SpringAOP 依赖;

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
            <version>2.7.4</version>
        </dependency>

第二步: 添加切面和切点;

@Aspect  // 当前是一个切面
@Component
public class UserAspect {
    // 设置拦截规则, Pointcut 就是一个切点
    @Pointcut("execution(* com.example.demo.controller.UserController.*(..))")
    public void pointcut() {
    }
}

*代表着在 UserController 中的所有方法都要拦截, 后面的 * (…) 指的是可以添加拦截条件, 如 (String, Integer) 两种类型就代表只拦截 UserController 里面的 (String, Integer) 类型的方法.


第三步: 定义通知 Advice, 描述拦截执行的时机和具体的方法实现;

@Aspect  // 当前是一个切面
@Component
public class UserAspect {
    // 设置拦截规则
    @Pointcut("execution(* com.example.demo.controller.UserController.*(..))")
    public void pointcut() {
    }

    /**
     * 定义 pointcut 切点的前置通知
     * 在执行目标方法之前执行的方法就是前置通知
     */
    @Before("pointcut()")
    public void doBefore() {
        System.out.println("前置通知: 执行了前置通知!");
    }

    /**
     * 针对 pointcut 切点的后置通知
     */
    @After("pointcut()")
    public void doAfter() {
        System.out.println("后置通知: 执行了后置通知!");
    }

    /**
     * AfterReturning
     * 在后置通知之前执行的
     */
    @AfterReturning("pointcut()")
    public void doAfterReturning() {
        System.out.println("执行了 AfterReturning 方法!");
    }

    /**
     * AfterThrowing: 目标方法抛出异常后调用
     * 只有报了异常之后才会执行, 执行在 方法之后,
     * 执行了 AfterThrowing 后, 将不会执行 AfterReturning
     */
    @AfterThrowing("pointcut()")
    public void doAfterThrowing() {
        System.out.println("执行了 AfterThrowing 方法!");
    }

    /**
     * 环绕通知(将所有通知和方法全部包围起来了)
     */
    @Around("pointcut()")
    public Object doAround(ProceedingJoinPoint joinPoint) {
        // Spring 中的时间统计对象
        StopWatch stopWatch = new StopWatch();
        Object result = null;
        System.out.println("环绕通知: 前置方法!");
        try {
            stopWatch.start(); // 统计方法的执行时间: 开启计时
            // 执行目标方法, 以及目标方法所对应的相应的通知
            result = joinPoint.proceed();
            stopWatch.stop(); // 统计方法的执行时间: 停止计时
        } catch (Throwable e) {
            e.printStackTrace();
        }
        System.out.println("环绕通知: 后置方法!");
        System.out.println(joinPoint.getSignature().getName() + " 方法执行花费的时间: " +
                stopWatch.getTotalTimeMillis() + "ms");
        return result;
    }
}

♞♞♞ 关于 AspectJ 表达式

Spring系列(八) --- 详述 SpringAOP--面向切面编程的相关概念及基本操作
如:文章来源地址https://www.toymoban.com/news/detail-405609.html

  • execution(* com.example.demo.User.*(. .)) : 匹配 User 类下的所有方法;
  • execution(* com.example.demo.User+.*(. .)) : 匹配该类的子类及该类的所有方法;
  • execution(* com.example.* .*(. .)) : 匹配 com.example 包下的所有类的所有方法;
  • execution(* com.example. .* .*(. .)) : 匹配 com.example 包下及子孙包下所有类的所有方法;
  • execution(* addUser(String, int)) : 匹配 addUser 方法, 且第一个参数类型是 String, 第二个参数类型是 int.

到了这里,关于Spring系列(八) --- 详述 SpringAOP--面向切面编程的相关概念及基本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring进阶系列丨第九篇】基于XML的面向切面编程(AOP)详解

    1.1.1、beans.xml中添加aop的约束 1.1.2、定义Bean ​ 问题:我们上面的案例经过测试发现确实在调用业务方法之前增加了日志功能,但是问题是仅仅能针对某一个业务方法进行增强,而我们的业务方法又有可能有很多,所以显然一个一个的去配置很麻烦,如何更加灵活的去配置呢

    2024年04月18日
    浏览(55)
  • Spring面向切面编程(AOP)

    AOP(Aspect Oriented Programming),即面向切面编程,利用一种称为\\\"横切\\\"的技术,剖开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为\\\"Aspect\\\",即切面。所谓\\\"切面\\\",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装

    2024年02月07日
    浏览(48)
  • Spring AOP:面向切面编程

    在软件开发中,我们经常会遇到一些横切关注点(cross-cutting concerns),如日志记录、事务管理和安全性等。这些关注点不属于特定的模块或类,而是横跨整个应用程序。传统的面向对象编程方法往往会将这些关注点与核心业务逻辑混杂在一起,导致代码的可读性和可维护性下

    2024年02月09日
    浏览(47)
  • [SSM]Spring面向切面编程AOP

    目录 十五、面向切面编程AOP 15.1AOP介绍 15.2AOP的七大术语 15.3切点表达式 15.4使用Spring的AOP 15.4.1准备工作 15.4.2基于AspectJ的AOP注解式开发 15.4.3基于XML配置方式的AOP(了解) 15.5AOP的实际案例:事务处理 15.6AOP的实际案例:安全日志 IoC使软件组件松耦合。AOP让你能够捕捉系统中经

    2024年02月15日
    浏览(48)
  • 认识 spring AOP (面向切面编程) - springboot

    本篇介绍什么是spring AOP, AOP的优点,使用场景,spring AOP的组成,简单实现AOP 并 了解它的通知;如有错误,请在评论区指正,让我们一起交流,共同进步! 本文开始 AOP: 面向切面编程,也就是面向某一类编程,对某一类事情进行统一处理; spring AOP: 是实现了AOP这种思想的一

    2024年02月14日
    浏览(50)
  • Spring AOP(面向切面编程)和方法拦截

    Spring AOP(面向切面编程)和方法拦截 Spring是一款广泛使用的Java开发框架,提供了丰富的功能和工具,用于简化企业级应用程序的开发。其中一个重要的特性是面向切面编程(AOP)和方法拦截。本文将介绍Spring AOP和方法拦截的概念、工作原理以及在实际开发中的应用。 在软

    2024年02月05日
    浏览(45)
  • 切面的魔力:解密Spring AOP 面向切面编程

    目录 一、AOP简介 1.1 什么是AOP ? 1.2 什么是面向切面编程 ? 1.3 AOP 的特点 二、 AOP的基本概念解读 2.1 AOP的基本概念 2.2 AOP 概念趣事解读 三、代码情景演示 3.1 编写目标对象(超级英雄们正常的行动) 3.2 编写通知类 3.2.1 前置通知 3.2.2 后置通知 3.2.3 异常通知 3.2.4 环绕通知

    2024年02月11日
    浏览(57)
  • JAVA:使用 Spring AOP 实现面向切面编程

    1、简述 在现代的软件开发中,面向切面编程(AOP)是一种重要的编程范式,它允许我们将横切关注点(如日志记录、性能监控、事务管理等)从应用程序的核心业务逻辑中分离出来,以提高代码的模块化和可维护性。Spring 框架提供了强大的 AOP 支持,使得我们可以轻松地实

    2024年04月13日
    浏览(45)
  • 【Java 初级】Spring核心之面向切面编程(AOP)

    tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 💕💕 推荐: 体系化学习Java(Java面试专题) AOP(面向切面编程)是一种编程范式,用于将横切关注点(如日志记录、性能统计等

    2024年02月04日
    浏览(50)
  • spring6-AOP面向切面编程

    1、场景模拟 搭建子模块:spring6-aop 1.1、声明接口 声明计算器接口Calculator,包含加减乘除的抽象方法 1.2、创建实现类 1.3、创建带日志功能的实现类 1.4、提出问题 ①现有代码缺陷 针对带日志功能的实现类,我们发现有如下缺陷: 对核心业务功能有干扰,导致程序员在开发核

    2024年02月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包