Spring Boot系列(三)使用AOP统一记录日志

AOP为Aspect Oriented Programming的缩写,意为面向切面编程。它是Spring两大核心之一,在Spring中AOP的实现可以通过jdk动态代理和CGLib代理两种方式实现。AOP的出现使得我们在开发过程中将系统关注点(日志记录,安全,事务等等)和实际业务逻辑分离开来,减少了各模块之间的耦合度,以及增加了代码的可重用性和灵活性,大大的简化了复杂应用的开发。好了,关于AOP的介绍就到这里,想深入了解的小伙伴可以自行查阅资料。下面来说说springboot如何使用AOP统一记录日志:

  1. 新建一个SpringBoot项目,然后建一个TestController类,LogAspect类以及日志记录工具类LogUtil,如下:
@RestController
@RequestMapping(value="/test")
public class TestController {

   @GetMapping(value="/sayHello")
   public String sayHello(){
   	LogUtil.log().info("sayHello()方法执行了...");
   	return "success";
   }
   
}
@Aspect
@Component
public class LogAspect {

	@Before("execution(public * com.instamina.springboot.controller.TestController.*(..))")
	public void before() {
		LogUtil.log().info("方法执行前。。。");
	}
	@After("execution(public * com.instamina.springboot.controller.TestController.*(..))")
	public void after() {
		LogUtil.log().info("方法执行后。。。");
	}
}
public class LogUtil {
	private static final Logger log = LoggerFactory.getLogger(LogUtil.class);
	
	public static Logger log() {
		return log;
	}
}

这里TestController和LogUtil这两个类自不必多说。对于LogAspect类:

@Aspect注解声明这是一个切面
@Component注解实例化对象
类内定义了一个前置通知和一个后置通知,分别用@Before和@After声明,其值为切点表达式,表示需要增强的方法

  1. 启动项目,控制台打印如下信息则表式成功
    在这里插入图片描述

不知小伙伴们有没有觉得LogAspect类很别扭,同一个切表达式居然写了两遍,以后维护起来非常的麻烦,而且可读性也不好。对此我们可以把切点表达式抽取出来,如何抽取呢?使用@Pointcut注解声明一个切点即可,下面我们来对LogAspect类做一些改动

@Aspect
@Component
public class LogAspect {
	@Pointcut(value="execution(public * com.instamina.springboot.controller.TestController.*(..))")
	public void log() {
		
	}
	@Before("log()")
	public void before() {
		LogUtil.log().info("方法执行前。。。");
	}
	@After("log()")
	public void after() {
		LogUtil.log().info("方法执行后。。。");
	}
}

这样是不是清爽多了呢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值