使用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());
}
}
上面的切面类中,定义了两个切面方法:
-
before方法:使用@Before注解,定义在所有Controller的方法执行前打印日志,用于写调试日志;
-
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注解所标记的类和方法,并在合适的时间执行切面逻辑。
四、测试
下面是两个使用示例:
- 测试日志输出
访问Controller方法,查看控制台输出:
@RestController
public class TestController {
@GetMapping("/")
public String test() {
return "Hello, World!";
}
}
- 测试异常捕获
访问Controller方法,抛出异常,查看控制台输出:
@RestController
public class TestController {
@GetMapping("/")
public String test() throws Exception {
throw new Exception("test exception");
}
}
以上就是使用Spring AOP统一捕获异常和写日志的示例demo的完整攻略了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用spring aop 统一捕获异常和写日志的示例demo - Python技术站