一、执行顺序
多个AOP执行顺序:order越小越是最先执行,最先执行的最后结束。
二、配置AOP执行顺序的三种方式
2.1 实现org.springframework.core.Ordered接口
@Component
@Aspect
public class WebLogAspect implements Ordered{
@Override
public int getOrder() {
// TODO Auto-generated method stub
return 1;
}
}
2.2 Order 注解
/**
* 描述: 打印请求和响应信息
*/
@Aspect
@Component
@Order(1)
public class WebLogAspect {
private final Logger log = LoggerFactory.getLogger(WebLogAspect.class);
@Pointcut("execution(public * com.imooc.mall.controller.*.*(..)))")
public void webLog(){
}
@Before("webLog()")
public void doBefore(JoinPoint joinPoint){
// 收到请求,记录请求内容
ServletRequestAttributes attributes =
(ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
log.info("URL : " + request.getRequestURL().toString());
log.info("HTTP_METHOD :" + request.getMethod());
log.info("IP : " + request.getRemoteAddr());
log.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "."
+ joinPoint.getSignature().getName());
log.info("ARGS : " + Arrays.toString(joinPoint.getArgs()));
}
@AfterReturning(returning = "res", pointcut = "webLog()")
public void doAfterReturning(Object res) throws JsonProcessingException {
//处理完请求,返回内容
log.info("RESPONSE : " + new ObjectMapper().writeValueAsString(res));
}
}
2.3 配置文件 配置order
<aop:config expose-proxy="true">
<aop:aspect ref="aopBean" order="0">
<aop:pointcut id="testPointcut" expression="@annotation(xxx.xxx.xxx.annotation.xxx)"/>
<aop:around pointcut-ref="testPointcut" method="doAround" />
</aop:aspect>
</aop:config>
网友评论