TIL 220411 ~ 0417

sally·2022년 4월 14일
0

TIL

목록 보기
6/6
  • 안드로이드팀과 BE로서 마스터즈 프로젝트
  • DB 설계
  • todo list의 "나의 활동 기록" 으로 history 내역에 대해 JPA auditing 이해 목표로 구현시도 하다가, 필드타입까지는 시간이 오래 걸릴 거 같아서 메서드 기준으로 aop 작업 시도

    • aop - pointcut 이 작동 안될 때
    • save() 의 내부 메소드 insert(), update() 별 aop를 이용해 history 저장 로직에서 해당 메서드를 인지하지 못 하고 있었다.
      • 커스텀 애노테이션도 인지하지 못하는걸 보면, 패키지로 해당 클래스를 인지하도록 했더라도, 내부 메서드가 아닌 호출 메서드의 인지시점이 다르게 돌아가나 보다 생각이 들기 시작했다.
     public Card save(Card card) {
             if (Objects.isNull(card.getCardId())) {
                 return insert(card);
             }
             if (update(card) < CARD_RESULT_OF_UPDATE_LENGTH) {
                 throw new IllegalArgumentException(ERROR_OF_CARD_DAO_UPDATE);
             }
             return card;
         }

    AOP가 작동할 때는 실제로는 실제 구현체 클래스가 아닌 프록시 객체를 만들어서 프록시 객체에서 원래 메소드를 invoke 하기 전 후에 사용자가 aspect에 정의한 메소드들을 적절히 실행시키는데, 포인트컷을 걸고 싶은 메소드의 실행이 외부호출이 아닌 내부호출로 실행되는 경우에는 프록시 객체가 해당 메소드를 호출할 수가 없기 때문에 내부호출 메소드에서는 aop를 사용할 수 없었던 것이다.

profile
sally의 법칙을 따르는 bug Duck

0개의 댓글