inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 DB 2편 - 데이터 접근 활용 기술

트랜잭션 AOP 주의 사항 - 프록시 내부 호출1

프록시 내부호출 1 질문이 있습니다

526

손한성

작성한 질문수 1

0

고급편을 듣고 이 강의를 들었으면 알 수 있을 것 같은 내용이지만, 다른 분들을 위해 또 성격이 급해서 질문을 남깁니다. CallService의 프록시 객체는 CallService를 상속받은 자식 객체로 이해했는데요. 언뜻 생각하기로는 internal을 내부 호출을 하더라도 override된 internal이 호출되기 때문에 트랜잭션이 적용될 것 같다는 생각이 드는데, 간단하게라도 이렇게 동작하지 않는 이유를 알 수 있으면 좋겠습니다. 검색을 해보니 AOP가 런타임에 인터셉트 하는 방식으로 동작하기 때문에 그렇다고 하는데요. 그렇다면 왜 override 하는 방식으로 구현하지 않았는지도 궁금해집니다.

spring

답변 1

1

김영한

안녕하세요. 손한성님

imageAOP가 적용되려면 그 앞에 프록시 객체가 먼저 호출이 되어야 합니다.
(그림에서 2번)

그런데 그림 3에서 그러니까 external() 메서드 내부에서 internal()을 호출하게 되면 이게 바로 내부 호출이 되는데요. 자바 언어에서는 내부 메서드를 호출하게 되면 this.이 붙으면서 자기 자신의 인스턴스를 호출하게 됩니다.

결과적으로 내부 호출은 AOP 프록시 객체를 호출하지 못해서 AOP가 적용되지 않습니다.

더 자세한 부분은 고급편에서 아주 자세히 설명해드립니다^^

감사합니다.

0

손한성

원본객체의 내용이 바뀌어서 프록시 객체가 되는 것이 아니었군요.
원본 객체의 내용은 그대로 있고,
프록시 객체가 원본을 상속받으면서 원본 객체를 멤버로 가지고 있는 것이기 때문이라는 것 잘 이해했습니다!!

설정 정보 없이 임베디드 데이터베이스 생성

0

15

1

RepositoryTest의 패키지 위치가 domain인 이유

0

37

2

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

0

32

1

update()에 사용하는 setter 질문드립니다.

0

49

1

SQL 중심적 개발의 문제점에 대한 질문

0

78

1

혹시 Containing 을 안쓰신 이유가 있을까요?

0

89

2

[공유] 스프링부트 4.x 버전 mybatis 연동

0

184

1

@repository 어노테이션

0

93

3

ItemService

0

59

1

논리 커밋, 물리 커밋 질문드립니다.

0

54

1

내부 트랜잭션 커밋은 필수인가요?

0

57

1

프록시 커넥션 객체를 반환할 때 생성하는건가요?

0

55

1

Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)

2

180

2

JPQL 대신 네이티브 쿼리를 사용해야 하는 경우

0

81

1

@EventListener(ApplicationReadyEvent.class) 관련

0

90

1

트랜잭션 동기화 매니저와 데이터 소스

0

77

1

DB 관련 강의 개설 계획은 없으신건가요?

0

133

2

물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요

0

96

1

스프링 3 버전 이상 rollbackFor 변경된듯요

1

114

1

트랜잭션 전파 질문.

0

87

1

프로젝트 오픈 에러

0

126

1

외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다

0

84

2

같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환

0

74

1

h2 인메모리 테스트중 예약어 충돌날 경우 대처방법

0

105

1