java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > AOP原理与使用

Spring中的AOP原理与使用详解

作者:程光CS

这篇文章主要介绍了Spring中的AOP原理与使用详解,AOP意为面向切面编程,可以通过预编译方式或运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术,需要的朋友可以参考下

一、什么是AOP

AOP (Aspect Oriented Programming) ,意为: 面向切面编程,可以通过预编译方式或运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。

AOP的编程思想就是把很多类对象中的横切问题点,从业务逻辑中分离出来,从而达到解耦的目的增加代码的重用性,提高开发效率。

二、AOP的应用场景

在这里插入图片描述

三、AOP中的概念定义

在这里插入图片描述

通知advice的类型

在这里插入图片描述

四、Springboot中如何使用AOP

五、AOP使用案例

引入依赖

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

编写切面类,统计接口耗时

@Slf4j
@Aspect //1. 声明这是一个切面类
@Component //2. 交给Spring容器管理
public class ApiTimeLogAspect {
    // 3. 定义切点表达式,明确要对那些方法起作用(比如,只对com.example.java.controller包的方法计算接口耗时)
    @Pointcut("execution(* com.example.java.controller.*.*(..))")
    public void controllerPointcut() {
    }
    // 4.定义通知,引用切点表达式。编写增强逻辑
    @Around("controllerPointcut()")
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        String className = pjp.getTarget().getClass().toString();//获取类名
        String methodName = pjp.getSignature().getName();//获取方法名
        Object[] args = pjp.getArgs();//获取请求参数
        // 记录接口执行前的时间戳
        long startTime = System.currentTimeMillis();
        // 实际执行目标方法,类似动态代理的invoke()执行目标方法
        Object result = pjp.proceed();
        // 计算接口耗时
        log.info("------------ {}:{}耗时: {} ms ------------", className, methodName, System.currentTimeMillis() - startTime);
        // 只做增强不做改变,还是要把接口原本的结果返回
        return result;
    }
}

到此这篇关于Spring中的AOP原理与使用详解的文章就介绍到这了,更多相关AOP原理与使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文