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日

相关文章

  • 什么是线程调度?

    以下是关于线程调度的完整使用攻略: 什么是线程调度? 线程调度是指操作系统或者虚拟机在多线程环境下,按照一定的策略配 CPU 时间片给各个线程执行的过程。在多线程编程中,线程调度是非常重要的,它直接影到程序的性能和响应速度。 线程调度的主要任务是: 分配 CPU 时间片给各个线程执行; 确定的优先级; 确定线程的状态,如就绪、运行、阻塞等。 线程调度的实现方…

    Java 2023年5月12日
    00
  • hibernate和mybatis对比分析

    文本格式要求: 标题使用#号表示,#号数量表示标题等级,一级标题一个#号,二级标题二个#号,以此类推 代码块使用三个反引号括起来,并标明代码语言 Hibernate和MyBatis对比分析 什么是Hibernate? Hibernate是一个基于Java的ORM框架,即对象关系映射框架。它可以将Java类映射到关系型数据库中的表,使得Java程序员可以使用面…

    Java 2023年5月19日
    00
  • 教你几个 Java 编程中使用技巧

    教你几个 Java 编程中使用技巧 Java 是一门功能强大的编程语言,拥有广泛的应用领域。在 Java 编程过程中,利用一些有效的技巧可以提高编程的效率和代码的质量。下面介绍几个 Java 编程中使用技巧。 1. 善用注释 在编写 Java 代码时,充分利用注释可以提高代码的可读性和可维护性。注释应包含对代码的解释和说明,尤其是对数据结构和算法的讲解。在编…

    Java 2023年5月23日
    00
  • 详解Java事件编程的使用

    详解Java事件编程的使用 什么是Java事件编程? 在Java编程中,事件是指程序或用户可以监测到并有可能做出反应的操作或通知。Java事件编程是基于事件模型的一种编程方法,也是一种事件驱动的编程方式。 事件驱动编程的核心在于将程序设计为一个能够响应特定事件的系统。在这种模式下,程序设计者无需关注具体的事件何时发生,只需要定义如何响应事件即可。 Java事…

    Java 2023年5月23日
    00
  • java 异常被catch后 将会继续执行的操作

    Java 异常被 catch 后,程序会执行 catch 块中的代码,而不是直接终止程序的执行。在处理完异常后,程序可以选择恢复正常状态并继续执行,或者让异常传递到更高级别的异常处理程序进行处理。 下面是 Java 异常被 catch 后将会继续执行的操作的完整攻略: 恢复程序正常状态 当程序发生异常时,可以在 catch 块中编写代码来恢复程序的正常状态。…

    Java 2023年5月27日
    00
  • spring cloud-给Eureka Server加上安全的用户认证详解

    下面是详细的攻略过程,分为三个部分:Eureka Server的基础配置、添加Spring Security的依赖、配置Spring Security的用户认证。 基础配置 首先需要创建一个基础的Eureka Server服务,可以在pom.xml文件中直接添加以下依赖: <dependency> <groupId>org.sprin…

    Java 2023年6月3日
    00
  • springboot打包不同环境配置以及shell脚本部署的方法

    SpringBoot打包不同环境配置以及Shell脚本部署的方法 在实际的应用中,我们需要针对不同的环境(如开发、测试、生产)进行配置,同时我们也需要使用Shell脚本一键部署以简化部署操作。 下面就以一个基础的Spring Boot应用为例,介绍一下如何实现不同环境配置以及Shell脚本部署。 1.不同环境配置 1.1 环境配置文件 首先,在resourc…

    Java 2023年5月20日
    00
  • jQuery性能优化的38个建议

    下面是详细讲解“jQuery性能优化的38个建议”的完整攻略。 前言 jQuery 是一个非常流行的 JavaScript 库,它可以帮助我们更加高效地进行网页开发。但是,在实际使用中,我们可能会遇到一些性能问题,进而影响网页的加载速度和性能。本篇攻略将向大家介绍 jQuery 性能优化的38个建议,帮助大家更好地优化网页性能。 性能优化建议 尽量使用 ID…

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