[Spring 8-2] Advice 매개변수 예제(시간측정)

임승현·2023년 2월 17일

Spring

목록 보기
21/46

🐧시간측정예제

🌈클래스 생성(핵심관심모듈)

📃ExecutionTimeBean.java

※ xyz.itwill07.aop 패키지에 ExecutionTimeBean.java 클래스 생성

package xyz.itwill07.aop;
//
public class ExecutionTimeBean {
	public void one() {
		//System.currentTimeMillis() : 시스템의 현재 날짜와 시간에 대한 타임스템프(TimeStamp)를 반환하는 메소드
		//타임스템프(TimeStamp) : 날짜와 시간을 정수값으로 변환한 값 - 날짜와 시간에 대한 연산 
		//long startTime=System.currentTimeMillis();
		//
		long count=0;
		for(long i=1;i<=10000000000L;i++) {
			count++;
		}
		System.out.println("count = "+count);
		//
		//long endTime=System.currentTimeMillis();
		//System.out.println("ExecutionTimeBean 클래스의 one 메소드 실행 시간 = "+(endTime-startTime)+"ms");
	}
	public void two() {
		//long startTime=System.currentTimeMillis();
		//
		long count=0;
		for(long i=1;i<=20000000000L;i++) {
			count++;
		}
		System.out.println("count = "+count);
		//long endTime=System.currentTimeMillis();
		//System.out.println("ExecutionTimeBean 클래스의 two 메소드 실행 시간 = "+(endTime-startTime)+"ms");
	}
}

🌈프로그램 생성

📃ExecutionTimeApp.java

※ xyz.itwill07.aop 패키지에 ExecutionTimeApp.java 클래스 생성

package xyz.itwill07.aop;
//
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
//
public class ExecutionTimeApp {
	public static void main(String[] args) {
		ApplicationContext context=new ClassPathXmlApplicationContext("07-3_timer.xml");
		ExecutionTimeBean bean=context.getBean("executionTimeBean", ExecutionTimeBean.class);
		System.out.println("================================================================");
		bean.one();
		System.out.println("================================================================");
		bean.two();
		System.out.println("================================================================");
		((ClassPathXmlApplicationContext)context).close();
	}
}

🌈환경설정파일 생성

📃07-3_timer.xml

※ src/main/resources 폴더에 07-3_timer.xml 생성

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
	<!-- ================================================================================ -->
	<bean class="xyz.itwill07.aop.ExecutionTimeBean" id="executionTimeBean"/>
	<!-- ================================================================================ -->
	<bean class="xyz.itwill07.aop.ExecutionTimeAdvice" id="executionTimeAdvice"/>
	<!-- ================================================================================ -->
	<aop:config>
		<aop:aspect ref="executionTimeAdvice">
			<aop:around method="timeWatchLog" pointcut="within(xyz.itwill07.aop.ExecutionTimeBean)"/>
		</aop:aspect>
	</aop:config>
</beans>

🌈Advice 클래스 생성(횡단관심모듈)

📃ExecutionTimeAdvice.java

※ xyz.itwill07.aop 패키지에 ExecutionTimeAdvice.java 클래스 생성

package xyz.itwill07.aop;
//
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.util.StopWatch;
//
public class ExecutionTimeAdvice {
	//타겟메소드의 명령이 실행되는 처리시간을 계산하여 출력하기 위한 메소드 - Around Advice Method
	public Object timeWatchLog(ProceedingJoinPoint joinPoint) throws Throwable {
		//타겟메소드의 명령 실행전에 동작될 명령 작성
		//long startTime=System.currentTimeMillis();
		//
		//StopWatch 객체 : 시간을 측정하기 위한 기능을 제공하기 위한 객체
		StopWatch stopWatch=new StopWatch();
		//
		//stopWatch.start() : 시간 측정을 시작하는 메소드
		stopWatch.start();
		//
		//타겟메소드 호출하여 명령 실행
		Object object=joinPoint.proceed();
		//
		//타겟메소드의 명령 실행후에 동작될 명령 작성
		//long endTime=System.currentTimeMillis();
		//
		//stopWatch.stop() : 시간 측정을 종료하는 메소드
		stopWatch.stop();
		//
		String className=joinPoint.getTarget().getClass().getSimpleName();
		String methodName=joinPoint.getSignature().getName();
		//
		//System.out.println(className+" 클래스의 "+methodName+" 메소드 실행 시간 = "+(endTime-startTime)+"ms");
		//
		//StopWatch.getTotalTimeMillis() : 측정된 시간을 ms 단위로 반환하는 메소드
		System.out.println(className+" 클래스의 "+methodName+" 메소드 실행 시간 = "+stopWatch.getTotalTimeMillis()+"ms");
		//
		return object;
	}
}

0개의 댓글