戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注
AOP-XML-advisor方式-后置通知和最终通知
spring应用手册(第四部分)
这里说明一下为什么后置通知和最终通知一起说呢,因为在后置通知接口继承了最终通知,并且在最终通知接口中本身就没有任何方法。我们来看看:
最终通知的接口:
package org.springframework.aop;
public interface AfterAdvice extends org.aopalliance.aop.Advice {
}
再看看后置通知的接口:
package org.springframework.aop;
public interface AfterReturningAdvice extends org.springframework.aop.AfterAdvice {
/**
* 后置通知/最终通知
* @param o 返回值
* @param method 被增强方法
* @param objects 方法参数列表
* @param o1 目标对象
* @throws Throwable
*/
@Override
public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable;
}
所以后置通知和最终通知的处理是一致的。
案例:
我们自己定义一个后置通知类:
/**
* @author 戴着假发的程序员
* @company http://www.boxuewa.com
* @description
*/
public class DkAfterAdvice implements AfterReturningAdvice {
/**
* 后置通知/最终通知
* @param o 返回值
* @param method 被增强方法
* @param objects 方法参数列表
* @param o1 目标对象
* @throws Throwable
*/
@Override
public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
System.out.println("--后置通知开始--");
System.out.println("目标对象:"+o1);
System.out.println("目标方法:"+method.getName());
System.out.println("参数列表:"+ Arrays.toString(objects));
System.out.println("方法的返回值:"+o);
System.out.println("--后置通知结束--");
}
}
在配置文件中配置后置通知
<!-- 配置后置通知bean-->
<bean id="dkAfterAdvice" class="com.st.dk.demo9.advices.DkAfterAdvice"/>
<!-- AOP配置 -->
<aop:config>
<aop:pointcut id="pointcut1"
expression="execution(* com.st.beans..*.*(..))"/>
<!-- 後置通知配置-->
<aop:advisor advice-ref="dkAfterAdvice" pointcut-ref="pointcut1"/>
</aop:config>
执行业务程序测试结果:
这里要注意,由于没有最终通知这样的说法,所以当业务程序出现异常中断时,后置通知将不会执行。