아무거나

[Spring Boot] *Service로 끝나는 파일만 접근하는 Aspect 적용 본문

Java & Kotlin/Spring

[Spring Boot] *Service로 끝나는 파일만 접근하는 Aspect 적용

전봉근 2020. 5. 16. 18:29
반응형

* 참고로 해당 포스팅은 Aspect가 gradle 디펜던시에 추가되어있다는 가정하에 진행

원하는 패키지 경로 안에 그 하위에 *Service로 끝나는 파일들만 Aspect 적용

    import lombok.AllArgsConstructor;
    import lombok.extern.slf4j.Slf4j;
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.Signature;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.Aspect;
    import org.springframework.stereotype.Component;

    @Component
    @Aspect
    @Slf4j
    @AllArgsConstructor
    public class ServiceAspect {
        // kr.co.bkjeon.services.api 패키지 안의 경로의 그 하위에 Service로 끝나는 파일들에 접근
        @AfterReturning("execution(* kr.co.bkjeon.services.api.*.*Service.*(..))")
        public void doSomethingAfterReturning(JoinPoint joinPoint) {
            Signature signature = joinPoint.getSignature();
            Object target = joinPoint.getTarget();
            Object[] args = joinPoint.getArgs();
            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
                .getRequest();

            System.out.println("--------------------------------------------------");

            System.out.println("Signature : " + signature.toString());
            System.out.println("target : " + target.toString());
            System.out.println("name : " + signature.getName());
            System.out.println("longName : " + signature.toLongString());
            System.out.println("shortName : " + signature.toShortString());

            for (int i=0; i < args.length; i++) {
                System.out.println("args[" + i + "] : " + args[i].toString());
            }
            
            System.out.println("httpMethod : " + request.getMethod());

            System.out.println("--------------------------------------------------");
        }

    }  
반응형
Comments