시간 확인하는데 필요한 메소드들...참고만 한다...... 참고로 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 |