1. 서문
Spring AOP를 소개하지 않을 것입니다. 온라인으로 많이 검색했습니다. Spring을 사용한 사람은 Spring의 IOC 및 AOP를 알고 있습니다. 우리는 종종 IOC를 사용하지만 우리 자신의 시스템에서 AOP의 사용은 거의 0입니다. 적용되는이 작은 모니터링 기능을 제외하고는 기본적으로 사용되지 않습니다. 아래에서 편집기는 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.stereotyp.component;/*** 탐지 메소드 실행을위한 시간 소모 스프링 패싯 클래스* @aspect에 의해 주석이 달린 클래스를 사용하여 스프링을 사용하여 스프링을 특수 콩 (섹션)으로 취급합니다. logger = logfactory.getLog (TimeInterceptor.class); // 1 분, 즉 1000ms 개인 정적 최종 Long One_Minute = 1000; // 서비스 계층의 통계 시간 소모 섹션은 문자열 유형의 경우 최종이어야하며, 주석에 사용될 변수는 정적 상수 유형 공개 정적 최종 문자열 point = "실행 (*com.blinkfox.test.service.impl.*.*(..))"; / ** * 주변 알림 주변의 통계 메소드의 실행 시간이 소요됩니다 * @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); 반환 obj; } /*** 메소드 실행을 인쇄하는 시간 소모적 인 정보를 인쇄합니다. 특정 시간을 초과하는 경우 print * @param methodname * @param starttime * @param endtime */ private void printemectime (String methodname, long starttime, long endtime) {long difftime = endtime -starttime; if (difftime> one_minute) {logger.warn ( "-----" + MethodName + "메소드 실행 시간 :" + difftime + "ms"); }}} 참고 : 마지막으로 applicationContext.xml 파일 <aop:aspectj-autoproxy/> AOP에서 요구하는 구성을 추가해야합니다.
요약
위의 것은 Spring AOP를 사용하여 실행 시간을 기록하는 것입니다. 이 기사의 내용이 모든 사람의 연구 나 업무에 도움이되기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.