简介
AOP(Aspect Oriented Programming),即面向切面编程,是Spring框架的大杀器之一。
可以用来做全局异常捕获,请求uuid等等
直接上代码
- 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
- 实战代码
@Aspect
@Component
public class AopController {
private static final Logger logger = LoggerFactory.getLogger(AopController.class);
ThreadLocal<Long> start = new ThreadLocal<>();
/**
* 定义一个切点
*/
@Pointcut("execution(public * com.example.springredis.action.*.*(..))")
public void handlerMethod() {
}
/**
* 环绕执行
* @param pjp
* @return
*/
@Around("handlerMethod()")
public Object handlerPageResultBeanMethod(ProceedingJoinPoint pjp) {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//获取请求request
HttpServletRequest request = requestAttributes.getRequest();
//获取请求response
HttpServletResponse response = requestAttributes.getResponse();
//获取请求路径名
String declaringTypeName = pjp.getSignature().getDeclaringTypeName();
System.out.println("路径"+declaringTypeName);
//获取请求方法名
String name = pjp.getSignature().getName();
System.out.println("方法名"+name);
start.set(System.currentTimeMillis());
Object proceed =null;
try {
proceed = pjp.proceed();
logger.info(pjp.getSignature() + " 方法执行耗时:" + (System.currentTimeMillis() - start.get()));
} catch (Throwable e) {
}
return proceed;
}
}