應用Spring AOP記載辦法的履行時光。本站提示廣大學習愛好者:(應用Spring AOP記載辦法的履行時光)文章只能為提供參考,不一定能成為您想要的結果。以下是應用Spring AOP記載辦法的履行時光正文
1、媒介
關於spring aop這個我就不多引見了,網上一搜一年夜把,應用過spring的人都曉得spring的ioc和aop。ioc我們經常使用,但在我們本身的體系中,aop的應用簡直為零,除這個監控的小功效運用到了,其他的根本上沒有應用到。上面小編就給年夜家整頓下應用Spring AOP記載辦法履行時光的處理計劃,有須要的一路看看吧。
2、處理計劃
1、傳統辦法
最簡略、粗魯的辦法是給各個須要統計的辦法開端和開頭處加的時光戳,然後差值盤算成果便可,代碼以下:
long startTime = System.currentTimeMillis();
// 營業代碼
long endTime = System.currentTimeMillis();
System.out.println("法式運轉時光:" + (endTime - startTime) + "ms"); //輸入法式運轉時光
如許的方法須要給許多統計辦法都加上耗不時間的代碼,這些代碼與焦點營業有關卻年夜量反復、疏散在遍地,保護起來也艱苦。
2、面向切面編程的辦法
所以,不推舉應用下面壞滋味的代碼。想了良久,盤算應用Spring AOP的思惟來完成這個功效,話不多說代碼和相干的說明以下:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
/**
* 檢測辦法履行耗時的spring切面類
* 應用@Aspect注解的類,Spring將會把它看成一個特別的Bean(一個切面),也就是纰謬這個類自己停止靜態署理
* @author blinkfox
* @date 2016-07-04
*/
@Aspect
@Component
public class TimeInterceptor {
private static Log logger = LogFactory.getLog(TimeInterceptor.class);
// 一分鐘,即1000ms
private static final long ONE_MINUTE = 1000;
// service層的統計耗時切面,類型必需為final String類型的,注解裡要應用的變量只能是靜態常量類型的
public static final String POINT = "execution (* com.blinkfox.test.service.impl.*.*(..))";
/**
* 統計辦法履行耗時Around圍繞告訴
* @param joinPoint
* @return
*/
@Around(POINT)
public Object timeAround(ProceedingJoinPoint joinPoint) {
// 界說前往對象、獲得辦法須要的參數
Object obj = null;
Object[] args = joinPoint.getArgs();
long startTime = System.currentTimeMillis();
try {
obj = joinPoint.proceed(args);
} catch (Throwable e) {
logger.error("統計某辦法履行耗時圍繞告訴失足", e);
}
// 獲得履行的辦法名
long endTime = System.currentTimeMillis();
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
String methodName = signature.getDeclaringTypeName() + "." + signature.getName();
// 打印耗時的信息
this.printExecTime(methodName, startTime, endTime);
return obj;
}
/**
* 打印辦法履行耗時的信息,假如跨越了必定的時光,才打印
* @param methodName
* @param startTime
* @param endTime
*/
private void printExecTime(String methodName, long startTime, long endTime) {
long diffTime = endTime - startTime;
if (diffTime > ONE_MINUTE) {
logger.warn("-----" + methodName + " 辦法履行耗時:" + diffTime + " ms");
}
}
}
留意:最初還須要在applicationContext.xml文件中加上AOP須要的設置裝備擺設<aop:aspectj-autoproxy/>,如許Spring能力辨認到它。
總結
以上就是關於應用Spring AOP記載辦法履行時光的全體內容,願望這篇文章的內容對年夜家的進修或許任務帶來必定的贊助,假如有疑問年夜家可以留言交換,感謝年夜家對的支撐。