📃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>
📃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; } }