← 질문 목록
#130깊이 0
내부 메서드 호출에 부가기능이 빠지는 이유는?
같은 객체 안에서 this로 호출하면 프록시를 거치지 않기 때문이다. 프록시가 가로채야 트랜잭션이나 로깅 같은 어드바이스가 실행된다.
- 1. 클라이언트에서 프록시로: 공개 메서드를 호출한다
- 2. 프록시에서 어드바이스로: 트랜잭션 등을 적용한다
- 3. 어드바이스에서 대상 객체로: 실제 메서드를 호출한다
- 4. 대상 객체에서 대상 객체로: 내부 호출은 프록시를 우회한다
JDK 동적 프록시는 인터페이스를 바탕으로 프록시를 만든다. 클래스 기반 프록시는 상속을 쓰므로 final 클래스와 final 메서드를 가로챌 수 없다.
적용 경계를 별도 빈으로 분리해 외부 호출로 만드는 방법이 명확하다. 프록시 노출이나 자기 자신 주입은 결합도를 높이므로 우선 선택이 아니다.
추천 꼬리질문
관련 질문
- @Transactional이 걸리지 않는 경우는?프레임워크@Transactional은 AOP 프록시 방식으로 동작하며, 내부 메서드 호출 시 프록시를 거치지 않아 트랜잭션이 적용되지 않는 현상이 부가기능 누락과 동일한 원리다.
- 스프링 AOP의 프록시 자기 호출 시 무엇이 문제인가?프레임워크같은 현상을 각도만 달리해 다룬다 — 프록시를 지나지 않는 내부 호출.
- 같은 함수를 불렀는데 this가 달라지는 이유는?언어 · 런타임
- 수정 메서드를 안 불렀는데 UPDATE가 나가는 이유는?프레임워크
- 수정 메서드 없이 UPDATE가 나가는 이유는?프레임워크