1、首先引入所需要依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>2.6.8</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.7</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.9.7</version> </dependency>
2、自定义注解
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface TimeConsuming {
String value() default "";
}
3、实现切面
@Slf4j
@Aspect
@Component
public class TimeAspect {
@Pointcut("@annotation(com.dada.jdk.aop.TimeConsuming)")
private void timePoint() {
}
@Around("timePoint() && @annotation(timeConsuming)")
public Object timePoint(ProceedingJoinPoint pjp, TimeConsuming timeConsuming) throws Throwable {
Long startTime = System.currentTimeMillis();
pjp.proceed();
Long endTime = System.currentTimeMillis();
log.info(timeConsuming.value());
log.info("cost time is:{}", endTime - startTime);
return pjp;
}
}
4、使用注解
@TimeConsuming("AopDemo")
public void put(){
System.out.println("this is a function");
}
}