Springboot项目快速实现Aop功能

下面是关于“Springboot项目快速实现Aop功能”的完整攻略,希望对你有帮助。

什么是AOP

AOP,全称为Aspect Oriented Programming,即面向切面编程。它是一种基于OOP的扩展,旨在通过预编译方式和运行期动态代理实现程序的透明化、模块化、松耦合等功能。通俗的理解就是,把一些常用功能提取出来,不用在每个业务场景都写一遍,比如日志记录、权限校验、性能统计等。

Springboot项目快速实现Aop功能

添加依赖

在pom.xml文件中添加如下依赖。

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

编写切面

编写一个切面类,并在其中编写需要执行的逻辑代码,例如打印日志等。

@Aspect
@Component
public class LogRecordAspect {

    private static final Logger logger = LoggerFactory.getLogger(LogRecordAspect.class);

    /**
     * 定义切入点
     */
    @Pointcut("execution(* com.example.demo.controller..*.*(..))")
    public void logRecord() {
    }

    /**
     * 在切入点执行前执行
     */
    @Before("logRecord()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        // 方法执行前打印日志
        logger.info("=====方法开始执行=====");
        // 获取方法参数
        Object[] args = joinPoint.getArgs();
        if (args != null) {
            for (Object arg : args) {
                logger.info("参数:" + arg.toString());
            }
        }
    }

    /**
     * 在切入点执行后执行,无论是否发生异常
     */
    @After("logRecord()")
    public void doAfter(JoinPoint joinPoint) {
        // 方法执行后打印日志
        logger.info("=====方法执行结束=====");
    }

    /**
     * 在切入点执行后,发生异常时执行
     */
    @AfterThrowing(pointcut = "logRecord()", throwing = "ex")
    public void doAfterThrowing(JoinPoint joinPoint, Exception ex) {
        // 方法执行后抛出异常时打印日志
        logger.info("=====方法执行异常=====");
        logger.error("异常信息:" + ex.getMessage());
    }

}

测试代码

为了演示该切面类的使用,我们编写一个简单的测试类。

@RestController
public class IndexController {

    @RequestMapping("/")
    public String index() {
        return "Hello, world!";
    }

    @RequestMapping("/test")
    public String test(String name) {
        if (name == null || "".equals(name.trim())) {
            throw new RuntimeException("参数name不能为空!");
        }
        return "Hello, " + name + "!";
    }

}

测试结果

启动应用,访问 / 和 /test 接口,控制台输出如下所示。

2021-09-06 17:57:56.987  INFO 17013 --- [nio-8080-exec-1] c.e.d.aspect.LogRecordAspect            : =====方法开始执行=====
2021-09-06 17:57:56.988  INFO 17013 --- [nio-8080-exec-1] c.e.d.aspect.LogRecordAspect            : 参数:null
2021-09-06 17:57:57.029 ERROR 17013 --- [nio-8080-exec-1] c.e.d.aspect.LogRecordAspect            : =====方法执行异常=====
2021-09-06 17:57:57.030 ERROR 17013 --- [nio-8080-exec-1] c.e.d.aspect.LogRecordAspect            : 异常信息:参数name不能为空!
2021-09-06 17:57:57.030  INFO 17013 --- [nio-8080-exec-1] c.e.d.aspect.LogRecordAspect            : =====方法执行结束=====

从日志中可以看出,在执行 / 接口时,没有产生异常,控制台只输出了方法开始执行和方法执行结束的日志;当执行 /test 接口时,产生了 RuntimeException 异常,控制台输出了方法开始执行、参数、方法执行异常和方法执行结束的日志。

以上就是快速实现Aop功能的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot项目快速实现Aop功能 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • java实现的DES加密算法详解

    Java实现的DES加密算法详解 什么是DES加密算法 DES加密算法是一种对称密钥算法,全称为“Data Encryption Standard”,是美国IBM公司于1975年研制的一种对称密钥加密算法。DES算法的原理非常简单,就是将明文经过一系列置换和替换操作,最终被加密成密文。而解密过程就是将密文经过相应的操作,最终得到明文。 DES算法具有如下特点…

    Java 2023年5月19日
    00
  • Java连接操作Oracle数据库代码详解

    Java连接操作Oracle数据库代码详解 简介 Java是一款广泛应用于企业级开发的高级编程语言,而Oracle是一款功能强大的关系型数据库管理系统。在开发过程中,我们经常需要使用Java连接Oracle数据库,并对其进行操作。本文将详细讲解Java连接操作Oracle数据库的代码实现过程。 步骤 1. 准备工作 在开始前,需要确认已经安装好以下两样内容:…

    Java 2023年5月19日
    00
  • Spring源码分析容器启动流程

    下面是针对“Spring源码分析容器启动流程”的完整攻略。 1. 前言 Spring是一个非常流行的Java开发框架,它最基本的组成部分就是一个IOC容器。在了解Spring的使用过程中,我们需要知道Spring容器启动的过程,这样可以更好的理解Spring的原理和运作机制。 2. Spring容器启动流程概述 Spring容器启动流程可以分为以下几个基本步…

    Java 2023年5月31日
    00
  • Mybatis分页插件PageHelper配置及使用方法详解

    下面我就为您详细讲解”Mybatis分页插件PageHelper配置及使用方法详解”。 一、PageHelper简介 PageHelper是一款Mybatis分页插件,它提供了分页的基本功能,包括支持MySQL、Oracle、SQLServer等数据库,支持多种分页查询方式,同时也提供了更好的Spring集成方式。 二、PageHelper使用方法 1.导入…

    Java 2023年5月20日
    00
  • 深入Java对象的地址的使用分析

    让我们来详细讲解一下深入Java对象的地址的使用分析的完整攻略。 概述 Java中的对象占用内存空间,对象的地址是用一个指针来表示的。在Java代码中,我们可以使用对象的引用来访问该对象,但在底层,JVM是通过引用所对应的对象地址来操作该对象的。因此,深入Java对象的地址的使用分析对于提高Java程序的性能和调试程序都是非常有帮助的。 获取对象地址 获取对…

    Java 2023年5月26日
    00
  • Java8的DateTimeFormatter与SimpleDateFormat的区别详解

    Java8的DateTimeFormatter与SimpleDateFormat的区别详解 在Java中,时间是一个很重要的概念,同时也是一个非常复杂的概念。在Java 8之前,程序员通常使用SimpleDateFormat类来处理日期和时间,但是这个类在多线程环境下是不安全的。在Java 8中,引入了DateTimeFormatter类,它是线程安全的,而…

    Java 2023年5月20日
    00
  • Mybatis全面分页插件

    下面是关于”Mybatis全面分页插件”的完整攻略: 一、什么是Mybatis全面分页插件? Mybatis全面分页插件是Mybatis框架的一个开源插件,它可以帮助我们在进行分页操作时更便捷地进行关联查询和聚合函数查询。相比于Mybatis自带的分页插件,它的优点在于可以使用XML或注解方式进行配置,并且配置简单、易于使用。 二、如何使用Mybatis全面…

    Java 2023年6月1日
    00
  • springboot集成mybatisplus的详细步骤

    关于如何在Spring Boot项目中集成MyBatis Plus,其详细步骤如下: 引入依赖 在 pom.xml 中添加以下依赖: <!– Mybatis Plus –> <dependency> <groupId>com.baomidou</groupId> <artifactId>myba…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部