版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013160017/article/details/84783944
两个不同优先级aop是拦截登录方法,执行顺序。
package com.leusysm.mgr.interceptor;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
* @author zhouhaiming Email: [email protected]
* @date 2018/11/21 10:51
*/
@Component
@Aspect
@Order(-3)
public class MessageQueueAopAspect1 {
private static final Logger LOG = LoggerFactory.getLogger(MessageQueueAopAspect1.class);
@Pointcut("execution(public * com.leusysm.mgr.controller.CasController.login(..))")
private void pointCutMethod() {
}
//声明前置通知
@Before("pointCutMethod()")
public void doBefore(JoinPoint point) {
LOG.info("MessageQueueAopAspect1:doBefore");
return;
}
//声明后置通知
@AfterReturning(pointcut = "pointCutMethod()", returning = "returnValue")
public void doAfterReturning(JoinPoint point,Object returnValue) {
LOG.info("MessageQueueAopAspect1:doAfterReturning");
}
//声明例外通知
@AfterThrowing(pointcut = "pointCutMethod()", throwing = "e")
public void doAfterThrowing(Exception e) {
LOG.info("MessageQueueAopAspect1:doAfterThrowing");
}
//声明最终通知
@After("pointCutMethod()")
public void doAfter() {
LOG.info("MessageQueueAopAspect1:doAfter");
}
//声明环绕通知
@Around("pointCutMethod()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
LOG.info("MessageQueueAopAspect1:doAround-1");
Object obj = pjp.proceed();
LOG.info("MessageQueueAopAspect1:doAround-2");
return obj;
}
}
package com.leusysm.mgr.interceptor;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
* @author zhouhaiming Email: [email protected]
* @date 2018/11/21 10:53
*/
@Component
@Aspect
@Order(-4)
public class MessageQueueAopAspect2{
private static final Logger LOG = LoggerFactory.getLogger(MessageQueueAopAspect2.class);
@Pointcut("execution(public * com.leusysm.mgr.controller.CasController.login(..))")
private void pointCutMethod() {
}
//声明前置通知
@Before("pointCutMethod()")
public void doBefore(JoinPoint point) {
LOG.info("MessageQueueAopAspect2:doBefore");
return;
}
//声明后置通知
@AfterReturning(pointcut = "pointCutMethod()", returning = "returnValue")
public void doAfterReturning(JoinPoint point,Object returnValue) {
LOG.info("MessageQueueAopAspect2:doAfterReturning");
}
//声明例外通知
@AfterThrowing(pointcut = "pointCutMethod()", throwing = "e")
public void doAfterThrowing(Exception e) {
LOG.info("MessageQueueAopAspect2:doAfterThrowing");
}
//声明最终通知
@After("pointCutMethod()")
public void doAfter() {
LOG.info("MessageQueueAopAspect2:doAfter");
}
//声明环绕通知
@Around("pointCutMethod()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
LOG.info("MessageQueueAopAspect2:doAround-1");
Object obj = pjp.proceed();
LOG.info("MessageQueueAopAspect2:doAround-2");
return obj;
}
}
根据order的不同执行顺序不一样。下面是两个aop的执行顺序,order越小优先级越高。
2018-12-04 10:03:39.864 [qtp1523196930-47] INFO c.g.l.m.i.MessageQueueAopAspect2 -MessageQueueAopAspect2:doAround-1
2018-12-04 10:03:39.865 [qtp1523196930-47] INFO c.g.l.m.i.MessageQueueAopAspect2 -MessageQueueAopAspect2:doBefore
2018-12-04 10:03:39.865 [qtp1523196930-47] INFO c.g.l.m.i.MessageQueueAopAspect1 -MessageQueueAopAspect1:doAround-1
2018-12-04 10:03:39.865 [qtp1523196930-47] INFO c.g.l.m.i.MessageQueueAopAspect1 -MessageQueueAopAspect1:doBefore
2018-12-04 10:03:40.232 [qtp1523196930-47] INFO c.g.l.m.i.MessageQueueAopAspect1 -MessageQueueAopAspect1:doAround-2
2018-12-04 10:03:40.232 [qtp1523196930-47] INFO c.g.l.m.i.MessageQueueAopAspect1 -MessageQueueAopAspect1:doAfter
2018-12-04 10:03:40.232 [qtp1523196930-47] INFO c.g.l.m.i.MessageQueueAopAspect1 -MessageQueueAopAspect1:doAfterReturning
2018-12-04 10:03:40.232 [qtp1523196930-47] INFO c.g.l.m.i.MessageQueueAopAspect2 -MessageQueueAopAspect2:doAround-2
2018-12-04 10:03:40.232 [qtp1523196930-47] INFO c.g.l.m.i.MessageQueueAopAspect2 -MessageQueueAopAspect2:doAfter
2018-12-04 10:03:40.232 [qtp1523196930-47] INFO c.g.l.m.i.MessageQueueAopAspect2 -MessageQueueAopAspect2:doAfterReturning