應用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記載辦法履行時光的全體內容,願望這篇文章的內容對年夜家的進修或許任務帶來必定的贊助,假如有疑問年夜家可以留言交換,感謝年夜家對的支撐。