Spring AOP系列之五:后置通知

阅读更多
和前置通知类似,
通过实现 org.springframework.aop.AfterReturningAdvice来完成后置通知:

public class CarAfterAdvice implements AfterReturningAdvice {

	@Override
	// returnValue 方法返回值,其它和前置通知相同
	public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
		System.out.println("Welcome to come again");
	}
}


Spring配置文件beans-after-advice.xml



  
  	
	
  
  
  
  
  
  	
  		com.john.spring.aop.Vehicle
	
	
		
			carAfterAdvice
		
	
	
		
	
  



测试:
public static void main(String[] args) {
	ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "beans-after-advice.xml" });
	Vehicle vehicle = (Vehicle) ctx.getBean("proxyBean");
	vehicle.info();
}


输出:
Car name: Superb, price: 220000
Welcome to come again


附:
执行info()时,调用org.springframework.aop.framework.adapter.AfterReturningAdviceAdapter的getInterceptor方法:
public MethodInterceptor getInterceptor(Advisor advisor) {
	AfterReturningAdvice advice = (AfterReturningAdvice) advisor.getAdvice(); // 获取后置通知实例
	return new AfterReturningAdviceInterceptor(advice);
}


然后调用org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor的invoke方法:
public Object invoke(MethodInvocation mi) throws Throwable {
	Object retVal = mi.proceed(); // 执行目标方法
	this.advice.afterReturning(retVal, mi.getMethod(), mi.getArguments(), mi.getThis()); // 执行后置通知方法
	return retVal;
}

你可能感兴趣的:(spring,aop,advice,after)