본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.





Spring ProceedingJoinPoint의 메서드


//Aspect 역할을 할 클래스를 선언하기 위해 어노테이션 선언
@Aspect
public class ExeTimeAspect {
    
    //PointCut의 속성에 핵심코드의 어느 부분까지 공통 기능을 사용하겟다고 명시
    @Pointcut("expression=within(com.ktko.test.*)")
    private void publicTarget() {
        
    }
    
    //around가 적용될 포인트 컷을 명시 : publicTarget()
    @Around("publicTarget()")
    public Object measure(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.nanoTime();
        try {
            Object result = joinPoint.proceed();
            return result;
        } finally {
            long finish = System.nanoTime();
            Signature sig = joinPoint.getSignature();
            System.out.printf("%s.%s(%s) 실행 시간 : %d ns\n", joinPoint.getTarget().getClass().
            getSimpleName(), sig.getName(), Arrays.toString(joinPoint.getArgs()), (finish - start));
            System.out.println(joinPoint.getTarget().getClass().getSimpleName());
            System.out.println(sig.getName());
            System.out.println(Arrays.toString(joinPoint.getArgs()));
        }
    }
}


Around Advice에서 사용할 공통 기능 메서드는 대부분 파라미터로 전달 받은 ProceedingJoinPoint의 proceed() 메서드만 호출하면 된다.


개발도중 호출되는 대상 객체에 대한 정보, 실행되는 메서드에 대한 정보, 메서드를 호출할 때 전달된 인자에 대한 정보가필요할 때가 다. 이들 정보에 접근할 수 있도록 ProceedingJoinPoint 인터페이스는 다음의 메서드를 제공하고 있다.


ProceedingJoinPoint 인터페이스의 제공 메서드

 메서드

 설명 

 Signature getSignature() 

 호출되는 메서드에 대한 정보를 구한다. 

 Object getTarget() 

 대상 객체를 구한다. 

 Object[] getArgs() 

 파라미터의 목록을 구한다. 


org.aspectj.lang.Signature 인터페이스는 호출되는 메서드와 관련된 정보를 제공하며 다음과 같은 메서드를 정의하고 잇다.

  메서드

 설명 

 String getName 

 메서드의 이름을 구한다. 

 String toLongString() 

 메서드를 완전하게 표현한 문장을 구한다. (메서드의 리턴 타입, 파라미터 타입이 모두 표시된다.) 

 String toShortString() 

 메서드를 축약해서 표현한 문장을 구한다. (기본 구현은 메서드의 이름만을 구한다.