AOPの@Asppectの使い方は、プログラムの実行方法を監視するために使用されます.

2274 ワード


Springで使用するAOPコメントは三つのレベルに分けられています.
前提条件はxmlの中で
1、@Asppectをクラスの頭に置いて、この種類を一つの断面とします.
2、@Pointcutをメソッドの先頭に置いて、他の方法で参照できる切り込みポイント表現を定義します.
3、5つの通知
3.1、@Before、事前通知、方法の頭の上に置く.
3.2、@After、後に【finally】通知を置いて、方法の頭の上に置きます.
3.3、@AfterReturning、後に【try】通知を置いて、方法の頭の上に置いて、returningを使って方法を参照して値を返します.
3.4、@After Throwing、後に【catch】通知を置いて、方法の頭に置いて、throwingを使って投げた異常を引用します.
3.5、@Asound、サラウンド通知、方法の頭の上に置いて、この方法は真実な方法が実行するかどうかを決定します.
@Component
@Aspect
public class LogAspect {

	/**
	 *   Pointcut,Pointcut      simplePointcut,         ,         
	 */
	@Pointcut("execution(public * com.service.impl..*.*(..))")
	public void recordLog() {
	}

	@AfterReturning(pointcut = "recordLog()")
	public void simpleAdvice() {
		LogUtil.info("AOP      ");
	}

	@Around("recordLog()")
	public Object aroundLogCalls(ProceedingJoinPoint jp) throws Throwable {
		LogUtil.info("    ");
		return jp.proceed();
	}

	@Before("recordLog()")
	public void before(JoinPoint jp) {
		String className = jp.getThis().toString();
		String methodName = jp.getSignature().getName(); //      
		LogUtil.info("  :" + className + "  " + methodName + "()  -  !");
		Object[] args = jp.getArgs(); //       
		if (args.length <= 0) {
			LogUtil.info("====" + methodName + "      ");
		} else {
			for (int i = 0; i < args.length; i++) {
				LogUtil.info("====    " + (i + 1) + ":" + args[i]);
			}
		}
		LogUtil.info("=====================================");
	}

	@AfterThrowing("recordLog()")
	public void catchInfo() {
		LogUtil.info("    ");
	}

	@After("recordLog()")
	public void after(JoinPoint jp) {
		LogUtil.info("" + jp.getSignature().getName() + "()  -  !");
		LogUtil.info("=====================================");
	}
}