todo list의 "나의 활동 기록" 으로 history 내역에 대해 JPA auditing 이해 목표로 구현시도 하다가, 필드타입까지는 시간이 오래 걸릴 거 같아서 메서드 기준으로 aop 작업 시도
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를 사용할 수 없었던 것이다.