작성
·
500
·
수정됨
0
고급편을 듣고 이 강의를 들었으면 알 수 있을 것 같은 내용이지만, 다른 분들을 위해 또 성격이 급해서 질문을 남깁니다. CallService의 프록시 객체는 CallService를 상속받은 자식 객체로 이해했는데요. 언뜻 생각하기로는 internal을 내부 호출을 하더라도 override된 internal이 호출되기 때문에 트랜잭션이 적용될 것 같다는 생각이 드는데, 간단하게라도 이렇게 동작하지 않는 이유를 알 수 있으면 좋겠습니다. 검색을 해보니 AOP가 런타임에 인터셉트 하는 방식으로 동작하기 때문에 그렇다고 하는데요. 그렇다면 왜 override 하는 방식으로 구현하지 않았는지도 궁금해집니다.
답변 1
1
안녕하세요. 손한성님
AOP가 적용되려면 그 앞에 프록시 객체가 먼저 호출이 되어야 합니다.
(그림에서 2번)
그런데 그림 3에서 그러니까 external() 메서드 내부에서 internal()을 호출하게 되면 이게 바로 내부 호출이 되는데요. 자바 언어에서는 내부 메서드를 호출하게 되면 this.이 붙으면서 자기 자신의 인스턴스를 호출하게 됩니다.
결과적으로 내부 호출은 AOP 프록시 객체를 호출하지 못해서 AOP가 적용되지 않습니다.
더 자세한 부분은 고급편에서 아주 자세히 설명해드립니다^^
감사합니다.
원본객체의 내용이 바뀌어서 프록시 객체가 되는 것이 아니었군요.
원본 객체의 내용은 그대로 있고,
프록시 객체가 원본을 상속받으면서 원본 객체를 멤버로 가지고 있는 것이기 때문이라는 것 잘 이해했습니다!!