1.自定义注解
package com.example.demotest.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface HandlingTime {
}
2.配置切面类
package com.example.demotest.annotation.aspect;
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;
@Aspect
@Component
public class HandlingTimeAspect {
@Pointcut("@annotation(com.example.demotest.annotation.HandlingTime)")
public void handlingTimePointcut() {}
@Around("handlingTimePointcut()")
public Object handlingTimeAround(ProceedingJoinPoint joinPoint){
try {
long startTime = System.currentTimeMillis();
Object proceed = joinPoint.proceed();
System.out.println(proceed);
System.out.println("方法执行时间:" + (System.currentTimeMillis() - startTime));
return proceed;
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return null;
}
}
3.在需要切面的方法加上自定义注解
@HandlingTime
@RequestMapping("www")
public String www(String q) {
int i = 100;
while (i > 0) {
i--;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "www";
}
4.开启AOP,否则Spring将识别不了
一.在 applicationContext.xml
文件中加上AOP需要的配置 <aop:aspectj-autoproxy/>
二.使用注解的话需加上
@EnableAspectJAutoProxy
@SpringBootApplication
@EnableAspectJAutoProxy
public class DemoTestApplication {
public static void main(String[] args) {
SpringApplication.run(DemoTestApplication.class, args);
}
}