Spring AOP

AOP:Aspect Oriented Programming 面向切片编程、面向方面编程,其实就说面向特定方法编程。
动态代理是面向切面编程最主流的实现。而SpringAOP是Spring框架的高级技术,目的是在管理bean对象的过程中,通过底层的动态代理机制,对特定方法进行编程。

使用方法

1.在pom.xml中导入AOP的依赖

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-aopartifactId>
        dependency>

2.编写AOP程序,针对特定方法进行编程

@Slf4j
@Component
@Aspect  // 定义为AOP类
public class TimeAspect {
    
    @Around("execution(* com.ztt.service.*.*(..))")
    public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable
    {
        
        //1.记录程序开始时间
        long begin = System.currentTimeMillis();

        //2.调用原始方法运行
        Object result = joinPoint.proceed();

        //3.记录结束时间,计算方法消耗时间
        long end = System.currentTimeMillis();
        log.info(joinPoint.getSignature()+"方法执行耗时:{}ms",end-begin);
        return result;
    }
}

AOP核心概念

1.连接点:JoinPoint,可以被AOP控制的方法(暗含方法执行时的相关信息)
2.通知:Advice,指那些函数或方法需要被AOP运行,也是共性功能(最终体现为一个方法)
3.切入点:PointCut,匹配连接点的条件,通知仅会在切入方法执行时被应用
4.切面:Aspect,描述通知与切入点的对应关系
5.目标对象:Target,通知应用的对象

AOP通知类型(Advice)

Spring AOP_第1张图片
Spring AOP_第2张图片

通知顺序

1.不同切面类中,默认按照切面类的类名字母排序
目标方法前的通知方法:字母排名靠前的先执行
目标方法后的通知方法:字母排名靠前的后执行

2.用 @Order(数字) 加在切面类上来控制顺序
目标方法前的通知方法:数字小的先执行
目标方法后的通知方法:数字小的后执行

切入点表达式

通过切入点表达式描述切入点方法的一种表达式,作用是用来决定那些方法需要加入通知。
常见的形式是
1.execution(…): 根据方法的签名来匹配
2. @annotation(…): 根据注解匹配

execution

Spring AOP_第3张图片
Spring AOP_第4张图片

@annotation(…)

Spring AOP_第5张图片

AOP连接点

Spring AOP_第6张图片

AOP的优势

Spring AOP_第7张图片

具体应用

你可能感兴趣的:(JAVA后端,spring,java,数据库)