/**
使用AOP打印日志和效率監(jiān)聽(記錄請求參數(shù)和返回結(jié)果和方法運行總時間)
**/
@Aspect
@Component
@Slf4j
public class TestAspect {
//com.kzj.kzj_rabbitmq.controller 包中所有的類的所有方法切面
//@Pointcut("execution(public * com.kzj.kzj_rabbitmq.controller..(..))")
//只針對 MessageController 類切面
//@Pointcut("execution(public * com.kzj.kzj_rabbitmq.controller.MessageController.*(..))")
//統(tǒng)一切點,對com.kzj.kzj_rabbitmq.controller及其子包中所有的類的所有方法切面
@Pointcut("execution(public * com.kzj.kzj_rabbitmq.controller...(..))")
public void Pointcut() {
}
//@Around:環(huán)繞通知
@Around("Pointcut()")
public Object Around(ProceedingJoinPoint pjp) throws Throwable {
Map<String,Object> data = new HashMap<>();
//獲取目標(biāo)類名稱
String clazzName = pjp.getTarget().getClass().getName();
//獲取目標(biāo)類方法名稱
String methodName = pjp.getSignature().getName();
//記錄類名稱
data.put("clazzName",clazzName);
//記錄對應(yīng)方法名稱
data.put("methodName",methodName);
//記錄請求參數(shù)
data.put("params",pjp.getArgs());
//開始調(diào)用時間
// 計時并調(diào)用目標(biāo)函數(shù)
long start = System.currentTimeMillis();
Object result = pjp.proceed();
Long time = System.currentTimeMillis() - start;
//記錄返回參數(shù)
data.put("result",result);
//設(shè)置消耗總時間
data.put("consumeTime",time);
System.out.println(data);
return result;
}
}