AOP是spring框架的第二大核心. AOP:Aspect Oriented Programming(面向切面编程、面向方面编程).面向切面编程就是面向特定方法编程。

除了传统的计时方法: 这个功能如果通过AOP来实现,我们只需要单独定义下面这一小段代码即可,不需要修改原始的任何业务方法即可记录每一个业务方法的执行耗时。

所以,AOP的优势主要体现在以下四个方面:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
@Component//表示交给spring管理
@Aspect //当前类为切面类
@Slf4j
public class RecordTimeAspect {
@Around("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))")//最终业务层的所有的方法在运行的时候都会执行这段AOP程序,最终统计出所有业务层方法的执行耗时
public Object recordTime(ProceedingJoinPoint pjp) throws Throwable {
//记录方法执行开始时间
long begin = System.currentTimeMillis();
//执行原始方法
Object result = pjp.proceed();//原始方法的返回值可能各种各样,所以统一用object接收
//记录方法执行结束时间
long end = System.currentTimeMillis();
//计算方法执行耗时
log.info("方法执行耗时: {}毫秒",end-begin);//可以使用pjp.getSignature()获取到方法签名,此时就可以知道是哪一个方法运行的耗时
return result;
}
}
我们通过AOP入门程序完成了业务方法执行耗时的统计,那其实AOP的功能远不止于此,常见的应用场景如下:
可以被aop控制的方法
。例如:入门程序当中所有的业务方法都是可以被aop控制的方法.


当通知和切入点结合在一起,就形成了一个切面。通过切面就能够描述当前aop程序需要针对于哪个原始方法,在什么时候执行什么样的操作。

而切面所在的类,称之为切面类(被@Aspect注解标识的类)。
目标对象指的就是通知所应用的对象,我们就称之为目标对象。
