spring AOP 使用

/**
     * AOP通知:
     * 1. 前置通知:在方法調(diào)用之前執(zhí)行
     * 2. 后置通知:在方法正常調(diào)用之后執(zhí)行
     * 3. 環(huán)繞通知:在方法調(diào)用之前和之后,都分別可以執(zhí)行的通知
     * 4. 異常通知:如果在方法調(diào)用過程中發(fā)生異常,則通知
     * 5. 最終通知:在方法調(diào)用之后執(zhí)行
     */
/**
 * 切面表達(dá)式:
 * execution 代表所要執(zhí)行的表達(dá)式主體
 * 第一處 * 代表方法返回類型 *代表所有類型
 * 第二處 包名代表aop監(jiān)控的類所在的包
 * 第三處 .. 代表該包以及其子包下的所有類方法
 * 第四處 * 代表類名,*代表所有類
 * 第五處 *(..) *代表類中的方法名,(..)表示方法中的任何參數(shù)
 *
 * @param joinPoint
 * @return
 * @throws Throwable
 */

Demo 查看service 執(zhí)行的時間

@Aspect
@Component
public class ServiceLogAspect {

    public static final Logger log =
            LoggerFactory.getLogger(ServiceLogAspect.class);

 
    @Around("execution(* com.imooc.service.impl..*.*(..))")
    public Object recordTimeLog(ProceedingJoinPoint joinPoint) throws Throwable {

        log.info("====== 開始執(zhí)行 {}.{} ======",
                        joinPoint.getTarget().getClass(),
                        joinPoint.getSignature().getName());

        // 記錄開始時間
        long begin = System.currentTimeMillis();

        // 執(zhí)行目標(biāo) service
        Object result = joinPoint.proceed();

        // 記錄結(jié)束時間
        long end = System.currentTimeMillis();
        long takeTime = end - begin;

        if (takeTime > 3000) {
            log.error("====== 執(zhí)行結(jié)束,耗時:{} 毫秒 ======", takeTime);
        } else if (takeTime > 2000) {
            log.warn("====== 執(zhí)行結(jié)束,耗時:{} 毫秒 ======", takeTime);
        } else {
            log.info("====== 執(zhí)行結(jié)束,耗時:{} 毫秒 ======", takeTime);
        }

        return result;
    }

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容