通过实现 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; }