시간 확인하는데 필요한 메소드들...참고만 한다...... 참고로 index.html 에 뭘 넣지는 않았음...

package com.kh.junspring.common;

import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.util.StopWatch;

public class AroundLog {
	public Object aroundLogs(ProceedingJoinPoint pp) throws Throwable {
		//ProceedingJoinPoint는 JoinPoint를 상속받아 구현된 인터페이스
		//ProceedingJoinPointfmf 사용하는 이유는 advice가 실행되는 시점을 프로그램밍 하기위해
		
		StopWatch stopWatch = new StopWatch();
		//start
		stopWatch.start();
		Object obj=pp.proceed(); //pointCut가 실행되는 시점을 잡는 것임
		//stop 
		stopWatch.stop();
		//메소드가 실행되는 시간 출력
		String methodName=pp.getSignature().getName();
		System.out.println(methodName +"()메소드 수행에 걸린시간 : "
				+ stopWatch.getTotalTimeMillis()+"(ms)");
		return obj;		//aroundLogs는 object을 리턴해야지 된다고 하지만 void도 상관없을듯
	}

}

root-context.xml에 추가

	<!--AOP XML -->
	<bean id="log" class="com.kh.junspring.common.LogAdvice"></bean> 
	<bean id="aroundLog" class="com.kh.junspring.common.AroundLog"></bean>
	<aop:config>
		<aop:pointcut expression="execution(* com.kh.junspring..*Impl.*(..))" id="allPointCut"/>
		<aop:aspect ref="log">
			<aop:before method="printLog" pointcut-ref="allPointCut"/>
			<aop:after method="printAfterLog" pointcut-ref="allPointCut"/>
		</aop:aspect>
		<aop:aspect ref="aroundLog">
			<aop:around method="aroundLogs" pointcut-ref="allPointCut"/>			
		</aop:aspect>
	</aop:config>

 

결과...

"execution(* com.kh.junspring..*Impl.*(..)) 의미는 무엇일까?

*포인트 컷 표현식, 범위로 PointCut를 설정할 수 있음..

* 리턴형, 패키지명, 클래스명, 메소드명(매개변수) 이렇게 표시되는 것이다.

1. * org.kh.com.member.model.service.*.*(..)

모든 리턴형이며 service패키지에 있는 모든 클래스 및 모든 메소드(매개변수 0개이상)

2. * org.kh.com.member.model.service..*.*(..)

service패키지의 하위 패키지까지 포함 모든 클래스 및 모든 메소드(매개변수 0개이상)

3. * org.kh.com.member.model.service.*.*()

service패키지만의 모든 클래스+메소드(매개변수가 없는 것만)

4.* org.kh.com.member.model.service..*.*(*)

모든리턴형의 service 하위패지키까지 모든 클래스+메소드( 매개변수 한개만)

5. * org.kh.com.member.model.service..*.*(Integer,..)

모든리턴형의 service 하위패지키까지 모든 클래스+메소드( 1번째파라미터는 정수+매개 변수0개이상)

6. int org.kh.member.service..*.*(integer, ..)

int리턴형의 service 하위패지키까지 모든 클래스 + 메소드(1번째파라미터는 정수+매개 변수0개이상)

7 int org.kh.member.service..*Impl.*(..)

int리턴형의 service 하위패지키까지 모든 Impl 클래스 +모든메소드(매개변수 0개이상)

 

<aop:befor> 메소드 실행 전에 적용되는 어드바이스를 정의
<aop:around> 메소드 호출 이전, 이후, 예외 발생 등 모든 시점에 적용가능한 어드바이스를 정의
<aop:after> 메소드가 정상적으로 실행되는지 또는 예외를 발생시키는지 여부에 상관없는 어드바이스를 정의
<aop:after-returning> 메소드가 정상적으로 실행된 후에 적용되는 어드바이스를 정의
<aop:after-throwing> 메소드가 예외를 발생시킬때 적용되는 어드바이스를 정의
Try-catch 블록에서 catch블록과 비슷함

<aop:around method="aroundLogs" pointcut-ref="allPointCut"/> 은

어드바이스Advice 를 정의하는 태그이고 이런의미이다.

 

'SPRING' 카테고리의 다른 글

AOP를 이용한 트랜젝션  (0) 2022.10.11
예외처리 어노테이션  (0) 2022.10.07
AOP 배우기  (0) 2022.10.07
220916 스프링 게시판_댓글 8-2 댓글리스트출력  (0) 2022.09.16
220916 스프링 게시판_댓글 8-1 댓글올리기  (1) 2022.09.16

+ Recent posts