pooney
article thumbnail

안녕하세요 오늘은 스프링 부트 AOP를 통해 Controller 호출로그와 파라미터 넘기기를 해보려고 합니다. 

 

많은 글에서 AOP를 통해 로그를 찍긴 하지만 파라미터를 어떻게 넘길 수 있는지는 설명이 없어서 직접 경험하고 찾아서

 

한번 만들어 보았습니다.  이경우 리플렉션의 사전 지식이 필요합니다. 

 

 

build.gradle

compile 'org.springframework.boot:spring-boot-starter-aop'

 

 

 

LogAop

@Component
@Aspect
public class LogAop {
    Logger logger =  LoggerFactory.getLogger(LogAop.class);

    @Around("execution(* com.develop.kr.tddproject.controller..*Controller.*(..))")
    public Object controllerLog(ProceedingJoinPoint joinPoint) throws Throwable{
        String callName  = joinPoint.getSignature().getName();
        logger.info(String.format("CONTROLLER -> %s API Call", callName));
        Long startTime = System.currentTimeMillis();

        Object[] parameterValues = joinPoint.getArgs();

        for(Object ob : parameterValues){
            if(ob.getClass().getName().equals(ReqeustTest.class.getName())){
                Method method = ob.getClass().getMethod("setKeyValue",String.class);
                method.invoke(ob,"STRING_KEY_POONEY");
            }
        }
        Object result = joinPoint.proceed();
        Long endTime = System.currentTimeMillis();
        logger.info(String.format("[%s , time taken] : %d ",callName ,endTime-startTime));
        return result;
    }


}

 

 

TestController

@RequestMapping("test")
@RestController
public class TestController {
    final Logger logger = LoggerFactory.getLogger(this.getClass());

    @GetMapping("/get")
    public ResponseEntity<String> getTest(HttpServletRequest request, ReqeustTest test){
        System.out.println("keyValue  : "+test.getKeyValue());
        return new ResponseEntity<String>(test.getKeyValue(),HttpStatus.OK);
    }
}

 

 

RequestTest

@ToString
@Getter
@Setter
public class ReqeustTest {
    private String name;
    private int age;
    private String keyValue;
}

 

 

[결과화면]

LogAop에서 넣어준 STRING_KEY_POONEY가 출력 되는 것을 확인 할 수 있습니다.

 

profile

pooney

@pooney

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!