Spring源码:AbstractAspectJAdvice抽象类

AbstractAspectJAdvice抽象类

用途:AOP基类,用来包装AspectJ切面或AspectJ注解的通知方法

public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedenceInformation, Serializable {
	private final Class<?> declaringClass;
	private final String methodName;
	private final Class<?>[] parameterTypes;
	protected transient Method aspectJAdviceMethod;
   // 切点
	private final AspectJExpressionPointcut pointcut;
	private final AspectInstanceFactory aspectInstanceFactory;
	// 切面名称
	private String aspectName;
	// 切面顺序
	private int declarationOrder;
    //......
}
扩展类
  • **AspectJMethodBeforeAdvice类:**Spring AOP advice that wraps an AspectJ before method.

    public class AspectJMethodBeforeAdvice extends AbstractAspectJAdvice implements MethodBeforeAdvice, Serializable {
        // 构造函数
    
    	@Override
    	public void before(Method method, Object[] args, Object target) throws Throwable {
    		invokeAdviceMethod(getJoinPointMatch(), null, null);
    	}
    
    	@Override
    	public boolean isBeforeAdvice() {
    		return true;
    	}
    	@Override
    	public boolean isAfterAdvice() {
    		return false;
    	}
    }
    
  • AspectJAfterAdvice类:Spring AOP advice wrapping an AspectJ after advice method.

    public class AspectJAfterAdvice extends AbstractAspectJAdvice
    		implements MethodInterceptor, AfterAdvice, Serializable {
    		
        // 构造函数
        
    	@Override
    	public Object invoke(MethodInvocation mi) throws Throwable {
    		try {
    			return mi.proceed();
    		}
    		finally {
    			invokeAdviceMethod(getJoinPointMatch(), null, null);
    		}
    	}
    
    	@Override
    	public boolean isBeforeAdvice() {
    		return false;
    	}
    
    	@Override
    	public boolean isAfterAdvice() {
    		return true;
    	}
    }
    
  • **AspectJAfterReturningAdvice类:**Spring AOP advice wrapping an AspectJ after-returning advice method.

    public class AspectJAfterReturningAdvice extends AbstractAspectJAdvice
    		implements AfterReturningAdvice, AfterAdvice, Serializable {
    	// 构造函数
    
    	@Override
    	public boolean isBeforeAdvice() {
    		return false;
    	}
    
    	@Override
    	public boolean isAfterAdvice() {
    		return true;
    	}
    
    	@Override
    	public void setReturningName(String name) {
    		setReturningNameNoCheck(name);
    	}
    
    	@Override
    	public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
    		if (shouldInvokeOnReturnValueOf(method, returnValue)) {
    			invokeAdviceMethod(getJoinPointMatch(), returnValue, null);
    		}
    	}
    	//......
    }
    
  • **AspectJAfterThrowingAdvice类:**Spring AOP advice wrapping an AspectJ after-throwing advice method.

    public class AspectJAfterThrowingAdvice extends AbstractAspectJAdvice
    		implements MethodInterceptor, AfterAdvice, Serializable {
    		// 构造函数
    	@Override
    	public boolean isBeforeAdvice() {
    		return false;
    	}
    
    	@Override
    	public boolean isAfterAdvice() {
    		return true;
    	}
    
    	@Override
    	public void setThrowingName(String name) {
    		setThrowingNameNoCheck(name);
    	}
    
    	@Override
    	public Object invoke(MethodInvocation mi) throws Throwable {
    		try {
    			return mi.proceed();
    		}
    		catch (Throwable ex) {
    			if (shouldInvokeOnThrowing(ex)) {
    				invokeAdviceMethod(getJoinPointMatch(), null, ex);
    			}
    			throw ex;
    		}
    	}
    	//......
    }
    
  • **AspectJAroundAdvice类:**Spring AOP around advice (MethodInterceptor) that wraps an AspectJ advice method. Exposes ProceedingJoinPoint.

    public class AspectJAroundAdvice extends AbstractAspectJAdvice implements MethodInterceptor, Serializable {
        // 构造函数
    	@Override
    	public boolean isBeforeAdvice() {
    		return false;
    	}
    
    	@Override
    	public boolean isAfterAdvice() {
    		return false;
    	}
    
    	@Override
    	protected boolean supportsProceedingJoinPoint() {
    		return true;
    	}
    
    	@Override
    	public Object invoke(MethodInvocation mi) throws Throwable {
    		ProxyMethodInvocation pmi = (ProxyMethodInvocation) mi;
    		ProceedingJoinPoint pjp = lazyGetProceedingJoinPoint(pmi);
    		JoinPointMatch jpm = getJoinPointMatch(pmi);
    		return invokeAdviceMethod(pjp, jpm, null, null);
    	}
        //.......
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bboyzqh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值