AOP

发布时间 2023-08-27 17:02:14作者: chuangzhou

目录

AOP基础

AOP: Aspect Object Programming(面向切面编程),其实就是面向特定方法编程

  • 动态代理是面向切面编程最主流的实现。而SpringAOP 是Spring 框架的高级技术,旨在管理bean对象的过程中,主要通过底层的动态代理机制,对特性的方法进行编程

需求:统计service 层各个业务方法的执行时间

引入SpringBoot AOP依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
package com.chuangzhou.aop;


import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Component
@Slf4j
@Aspect
public class TimeAspact {
    
    @Around("execution(* com.chuangzhou.serivce.impl.*.*(..))")
    public Object recordTime(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {

        //1. 记录当前系统毫秒值
        long start = System.currentTimeMillis();

        //2.执行拦截方法
        Object result = proceedingJoinPoint.proceed();  // result 为被执行方法的返回值

        //3.记录当前系统毫秒值
        long end = System.currentTimeMillis();
        log.info(proceedingJoinPoint.getSignature() + "耗时:{}", end - start);

        return result;
    }

}

拦截到方法的耗时时间:

使用场景和优势: