티스토리 뷰

AOP에 대한 개념실전예제를 참고해주세요. 모든 코드는 깃허브에 있습니다. 

 

 

문제

AOP를 사용하여 domain 패키지 안의 모든 요청에서 파라미터의 타입과 값을 찍으려고 했다. 코드는 다음과 같다. 

    @Pointcut("execution(* com.motivation.mojaty.domain..web.api..*.*(..))")
    private void cut() {}

    @Before("cut()")
    public void before(JoinPoint joinPoint) {
        Object[] args = joinPoint.getArgs();

        for(Object obj : args) {
            log.info("type = {}", obj.getClass().getSimpleName());
            log.info("value = {}", obj);
        }
    }

 

하지만 로그가 찍히지 않았다. 왜일까 ?

 

 

해결

바로 사용자의 요청을 받는 DTO에 toString을 재정의 하지 않았기 때문이다. 

@ToString

 

문제쪽의 코드를 자세히 보면 Object값을 받아와서 그 값을 그대로 로그에 찍고 있다. 

Object[] args = joinPoint.getArgs();
log.info("value = {}", obj);

 

Object의 값을 보여주는 메서드가 바로 toString()이기 때문에, 사용자의 요청을 받을 DTO에 toString()을 재정의 해주지 않으면 빈 껍데기 값만 보여준다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday