戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注
AOP-XML-后置通知发布
spring应用手册(第四部分)
所谓后置通知就是在目标方法执行结束之后进行业务增强。
我们可以在后置通知的增强方法中传入JoinPoint和业务方法的返回值。当然也可以什么都不传。
看案例:
在Aspect类中添加一个后置通知的方法:
/**
* @author 戴着假发的程序员
* @company http://www.boxuewa.com
* @description
*/
public class DkAspect {
/**
* 后置通知
* 使用 retVal接受被增强方法的返回值,如果没有返回值retval就是null
*/
public void afterReturning(JoinPoint joinPoint,Object retVal){
System.out.println("后置通知,目标方法的返回值:"+retVal);
}
}
在aop:config中添加一个后置通知的配置:
<!-- AOP配置 -->
<aop:config>
<!-- 申明AspectBean,引用我们注册的dkAspect -->
<aop:aspect id="aspect" ref="dkAspcet">
<!-- 声明一个切入点,命名为pointcut1 -->
<!-- 如果我们的before增强方法中传入了参数msg,我就要使用args(msg)限定切入点 -->
<aop:pointcut id="pointcut1"
expression="execution(* com.st.beans..*.*(..))"/>
<!-- 后置通知 -->
<aop:after-returning method="afterReturning" pointcut-ref="pointcut1" returning="retVal"/>
</aop:aspect>
</aop:config>
执行业务方法执行结果:
注意,如果业务方法出现异常导致程序中断,后置通知就不会再执行。
案例:
我们给业务方法添加一个异常,并且不做处理:
/**
* @author 戴着假发的程序员
* @company http://www.boxuewa.com
* @description
*/
public class MessageBean {
//输出信息的业务方法
public String printMessage(String msg){
System.out.println("MessageBean-printMessage:"+msg);
String str = null;
str.trim();//抛出空指针异常
return msg;
}
}
执行业务方法测试结果:
注意,如果业务方法中的异常被处理,程序没有中断,继续执行了,那么后置处理会继续执行。