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("=====================================");
}
}