使用spring aop 统一捕获异常和写日志的示例demo

使用Spring AOP统一捕获异常和写日志可以提高程序的健壮性和可维护性,下面是示例demo的详细攻略:

一、添加依赖

在pom.xml中添加Spring AOP和Spring Boot Starter Logging的依赖:

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

二、定义切面类

定义一个切面类,用于处理异常和写日志,其中@Before和@AfterThrowing注解用于定义方法在哪些JoinPoint上执行:

@Aspect
@Component
public class ExceptionLogAspect {

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

    @Before("execution(* com.example.demo.controller.*.*(..))")
    public void before(JoinPoint joinPoint){
        logger.info("Method: {} with args {}", joinPoint.getSignature().getName(), Arrays.toString(joinPoint.getArgs()));
    }

    @AfterThrowing(pointcut = "execution(* com.example.demo.controller.*.*(..))", throwing = "ex")
    public void afterThrowing(Throwable ex) {
        logger.error("Exception: {}", ex.getMessage());
    }
}

上面的切面类中,定义了两个切面方法:

  1. before方法:使用@Before注解,定义在所有Controller的方法执行前打印日志,用于写调试日志;

  2. afterThrowing方法:使用@AfterThrowing注解,定义在所有Controller的方法抛出异常后打印异常信息,用于记录错误日志。

三、启用AOP

在Spring Boot应用程序的启动类中添加@EnableAspectJAutoProxy注解来启用AOP:

@SpringBootApplication
@EnableAspectJAutoProxy
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

工作原理:添加@EnableAspectJAutoProxy注解后,Spring Boot应用程序能够自动配置AOP代理。AOP代理将会拦截被@Aspect注解所标记的类和方法,并在合适的时间执行切面逻辑。

四、测试

下面是两个使用示例:

  1. 测试日志输出

访问Controller方法,查看控制台输出:

@RestController
public class TestController {

    @GetMapping("/")
    public String test() {
        return "Hello, World!";
    }

}
  1. 测试异常捕获

访问Controller方法,抛出异常,查看控制台输出:

@RestController
public class TestController {

    @GetMapping("/")
    public String test() throws Exception {
        throw new Exception("test exception");
    }

}

以上就是使用Spring AOP统一捕获异常和写日志的示例demo的完整攻略了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用spring aop 统一捕获异常和写日志的示例demo - Python技术站

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

相关文章

  • 一文教你掌握Java如何实现判空

    接下来我将为你详细讲解实现Java判空的完整攻略。 判空的概念 判空,是指对一个对象或变量进行判断,看是否为空。在Java中,判空通常指的是null。 判断不为空的方法 1.使用判断语句 我们可以使用if语句来判断一个值是否为null。例如: if(s != null){ System.out.println("s不为空"); } 这段代…

    Java 2023年5月27日
    00
  • 多数据源模式JPA整合sharding-jdbc实现数据脱敏

    一、什么是多数据源模式? 多数据源模式是指一个应用程序使用了多个不同的数据库来存储数据。不同的数据库可能使用不同的技术和存储数据的方式来满足不同的需求,如:积累大量的日志、信息系统等。 二、什么是JPA? JPA(Java Persistence API),是Java EE标准中一种用来管理Java对象关系映射的API。通过JPA操作数据库可以简化数据库表的…

    Java 2023年5月20日
    00
  • 完整java开发中JDBC连接数据库代码和步骤

    当进行Java开发中需要连接数据库进行数据操作时,我们可以使用JDBC来完成这个任务。下面详细介绍完整的JDBC连接数据库代码和步骤,这里以MySQL数据库和Oracle数据库为例。 JDBC连接MySQL数据库 步骤一:导入JDBC驱动 要连接MySQL数据库,我们需要使用MySQL JDBC驱动程序。将JDBC驱动程序的JAR文件添加到classpath…

    Java 2023年5月19日
    00
  • java.lang.NoClassDefFoundError错误解决办法

    下面我将详细讲解如何解决”java.lang.NoClassDefFoundError”错误。 1. 什么是”java.lang.NoClassDefFoundError”错误 “java.lang.NoClassDefFoundError”错误是Java程序编译或运行过程中遇到的一个常见错误,表示无法找到相关类的定义。它通常是由以下原因导致的: 缺少相关类…

    Java 2023年5月20日
    00
  • Springmvc如何实现向前台传递数据

    下面是Spring MVC向前台传递数据的完整攻略。 1. 了解Spring MVC架构 在Spring MVC中,前台的请求被DispatcherServlet(前端控制器)拦截处理,控制器接收请求,处理请求,然后返回ModelAndView对象给DispatcherServlet,再由DispatcherServlet返回给前台视图。因此,我们可以使用M…

    Java 2023年6月15日
    00
  • Struts2实现文件下载功能代码分享(文件名中文转码)

    下面是详细的“Struts2实现文件下载功能代码分享(文件名中文转码)”攻略: 1. 背景介绍 Struts2是一个优秀的MVC框架,而文件下载是很多Web项目中常见的需求。本文将介绍如何在Struts2中实现文件下载功能,并且解决中文文件名乱码的问题。 2. 实现步骤 2.1 编写Action 首先,我们需要创建一个Action类,用于处理文件下载请求。该…

    Java 2023年5月20日
    00
  • Java 定时任务技术趋势详情

    Java 定时任务技术趋势详情 什么是 Java 定时任务技术 Java 定时任务技术是一种可以在预定的时间执行任务的技术,它通常用于在特定的时间或周期性地执行某些操作。在 Java 中,定时任务由 Java 自带的 java.util.Timer 类、java.util.concurrent.ScheduledExecutorService 类、Sprin…

    Java 2023年5月20日
    00
  • Java日期时间字符串和毫秒相互转换的方法

    下面是详细讲解Java日期时间字符串和毫秒相互转换的方法的攻略。 一、Java日期时间字符串转毫秒 1.1 SimpleDateFormat类 在Java中,可以使用SimpleDateFormat类来完成日期时间字符串的转换。SimpleDateFormat是Java中日期时间格式化类的一个子类,它继承了DateFormat类,提供了非常方便的日期时间格式…

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