← 질문 목록
#383깊이 0
같은 클래스 내부에서 메서드를 호출하면 왜 AOP가 동작하지 않는가?
프레임워크
답변 연습
내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요
클라이언트가 프록시가 아닌 실제 대상 객체의 자신을 직접 호출하기 때문이다.
- 1. 클라이언트에서 프록시로: externalMethod() 호출 (AOP 동작)
- 2. 프록시에서 실제객체로: externalMethod() 실행
- 3. 실제객체에서 실제객체로: internalMethod() 직접 호출 (AOP 미적용)
스프링 AOP는 대상 객체를 감싼 프록시를 빈으로 등록한다. 외부에서 빈을 호출하면 프록시가 요청을 받아 부가 기능을 수행한 뒤 실제 객체로 넘긴다.
내부 메서드를 호출하면 프록시가 아니라 실제 객체의 this 참조를 사용한다. 호출 흐름이 프록시를 거치지 않으므로 부가 기능이 실행되지 않는다.
부가 기능이 필요한 메서드를 별도 클래스로 분리하여 주입받는 방법이 흔히 쓰인다. 스프링 컨테이너가 새 클래스의 프록시를 주입하므로 프록시를 거쳐 호출된다.