概念
- 切入点(Pointcut)
- 切面(Aspect)
- 连接点(JoinPoint)
- 目标(Target)
- 织入(Weaving)
几种增强器(Advice)
- Before 前置
- After 后置
- AfterReturning 正常返回
- AfterThrowing 异常
- Aroud 环绕
@Component
@Aspect
public class WebLogAspect {
private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
@Pointcut("execution(* com.ritu.controller.*.*(..))")
public void webLog() { }
@Before("webLog()")
public void doBefore(JoinPoint joinPoint) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
logger.info("URL:{}",request.getRequestURL().toString());
logger.info("HTTP_METHOD:{}",request.getMethod());
logger.info("IP:{}",request.getRemoteAddr());
logger.info("CLASS_METHOD:{}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
logger.info("ARGS:{}", Arrays.toString(joinPoint.getArgs()));
}
@After("webLog()")
public void doAfter() {
logger.info("POSTPROCESSOR EXCUTED");
}
@AfterReturning(pointcut = "webLog()",returning = "result")
public void doAfterReturning(Object result) {
logger.info("RESPONSE:{}",result.toString());
}
@AfterThrowing(pointcut = "webLog()",throwing = "exception")
public void doAfterThrowing(Exception exception) {
logger.error("EXCEPTION:{}",exception);
}
@Around("webLog()")
public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object proceed = proceedingJoinPoint.proceed();
long end = System.currentTimeMillis();
logger.info("METHOD EXCUTED TIME:{}ms",end-start);
return proceed;
}
}