程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 應用Spring AOP記載辦法的履行時光

應用Spring AOP記載辦法的履行時光

編輯:關於JAVA

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved