로딩
요청 처리 중입니다...

Spring IoC & AOP: final 메서드에서 NPE을 마주한 이유

 Spring IoC & AOP: final 메서드에서 NPE을 마주한 이유

리팩토링 과정에서 Template Method 패턴을 적용한 추상 클래스에 @Transactional을 추가한 이후, 프록시와 final 메서드가 충돌하며 NPE가 발생하는 문제를 마주하게 되었습니다. Template Method 패턴은 주로 도메인 순수 자바 객체로만 구현하고 있었지만, 컴포넌트로 구현해야 하는 상황이 생기면서 @Transactional 적용이 필요해졌습니다.

컴포넌트로 등록되는 순간 Spring 빈으로 관리되고, @Transactional AOP에 의해 클래스 단위의 프록시 객체로 관리가 됩니다. 하지만 이때, 의존받은 정보를 사용하는 final 메서드가 내부에 존재한다는 사실을 놓쳤고, 바로 그 지점에서 NPE가 발생하게 되었습니다.

이 문제를 정확히 이해하기 위해, Spring IoC 컨테이너와 AOP가 실제로 어떤 방식으로 동작하는지 다시 한 번 정리해보고자 합니다. 문제 상황 AbstractExcelTypeHandler는 엑셀 (업로드&성공건 저장&실패건 ...