一、导入aop的jar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
二、配置IOC的扫描包
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="cn.tedu"/>
</beans>
三、创建切面类
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
//spring的aop功能,其实就是为了增强方法的功能,由切点和通知组成
@Component
@Aspect//标记是一个切面
public class AspectTest {
//切点:来指定包,类,方法加功能
@Pointcut("execution(* cn.tedu.service..*.*(..))")
public void piont(){}
//标记环绕通知
@Around("piont()")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable{
//设置开始时间
long start = System.currentTimeMillis();
System.out.println("开始时间"+start);
//执行原来的业务
Object o = joinPoint.proceed();
//获取结束时间
long end = System.currentTimeMillis();
System.out.println("结束时间"+end);
//执行总时长
System.out.println("执行时长:"+(end-start));
return o;
}
}
四、执行结果
![](https://i-blog.csdnimg.cn/blog_migrate/7c33ba1ed3c9073064f98e7881ad3793.png)