首页>代码>Java Spring AOP用法实例讲解>/zuidaima_springAOP/src/com/tgb/aop/XMLAdvice.java
package com.tgb.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

/**
 * Advice通知类
 * 测试after,before,around,throwing,returning Advice.
 * @author Admin
 *
 */
public class XMLAdvice {

	/**
	 * 在核心业务执行前执行,不能阻止核心业务的调用。
	 * @param joinPoint
	 */
	private void doBefore(JoinPoint joinPoint) {
		System.out.println("-----doBefore().invoke-----");
		System.out.println(" 此处意在执行核心业务逻辑前,做一些安全性的判断等等");
		System.out.println(" 可通过joinPoint来获取所需要的内容");
		System.out.println("-----End of doBefore()------");
	}
	
	/**
	 * 手动控制调用核心业务逻辑,以及调用前和调用后的处理,
	 * 
	 * 注意:当核心业务抛异常后,立即退出,转向After Advice
	 * 执行完毕After Advice,再转到Throwing Advice
	 * @param pjp
	 * @return
	 * @throws Throwable
	 */
	private Object doAround(ProceedingJoinPoint pjp) throws Throwable {
		System.out.println("-----doAround().invoke-----");
		System.out.println(" 此处可以做类似于Before Advice的事情");
		
		//调用核心逻辑
		Object retVal = pjp.proceed();
		
		System.out.println(" 此处可以做类似于After Advice的事情");
		System.out.println("-----End of doAround()------");
		return retVal;
	}

	/**
	 * 核心业务逻辑退出后(包括正常执行结束和异常退出),执行此Advice
	 * @param joinPoint
	 */
	private void doAfter(JoinPoint joinPoint) {
		System.out.println("-----doAfter().invoke-----");
		System.out.println(" 此处意在执行核心业务逻辑之后,做一些日志记录操作等等");
		System.out.println(" 可通过joinPoint来获取所需要的内容");
		System.out.println("-----End of doAfter()------");
	}
	
	/**
	 * 核心业务逻辑调用正常退出后,不管是否有返回值,正常退出后,均执行此Advice
	 * @param joinPoint
	 */
	private void doReturn(JoinPoint joinPoint) {
		System.out.println("-----doReturn().invoke-----");
		System.out.println(" 此处可以对返回值做进一步处理");
		System.out.println(" 可通过joinPoint来获取所需要的内容");
		System.out.println("-----End of doReturn()------");
	}
	
	/**
	 * 核心业务逻辑调用异常退出后,执行此Advice,处理错误信息
	 * @param joinPoint
	 * @param ex
	 */
	private void doThrowing(JoinPoint joinPoint,Throwable ex) {
		System.out.println("-----doThrowing().invoke-----");
		System.out.println(" 错误信息:"+ex.getMessage());
		System.out.println(" 此处意在执行核心业务逻辑出错时,捕获异常,并可做一些日志记录操作等等");
		System.out.println(" 可通过joinPoint来获取所需要的内容");
		System.out.println("-----End of doThrowing()------");
	}
}
最近下载更多
1358849392  LV21 1月22日
丨灼灼其华丨  LV1 2020年12月21日
759985221  LV8 2020年8月12日
cz206616  LV10 2020年5月31日
liuwenlong  LV20 2019年12月28日
hey_two  LV3 2019年12月3日
bdkwxz  LV10 2019年10月29日
Rommel  LV27 2019年8月29日
车尔尼小鹿鹿  LV12 2019年8月27日
不期而遇则缘  LV9 2019年5月1日
最近浏览更多
1358849392  LV21 1月22日
三几个  LV11 2023年5月23日
女王不该在山炮村养花  LV8 2023年4月6日
我就一大帅比 2023年2月16日
暂无贡献等级
00044304  LV6 2022年8月23日
yyh1252  LV8 2022年8月8日
1234mama  LV19 2022年3月10日
lf_123  LV3 2021年7月5日
alexcheung  LV3 2021年6月23日
thecl1  LV1 2021年6月21日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友