인프런 커뮤니티 질문&답변

HH님의 프로필 이미지
HH

작성한 질문수

스프링 핵심 원리 - 고급편

스프링 AOP 구현6 - 어드바이스 종류

ProceedingJoinPoint에 대해 질문이 있습니다.

해결된 질문

작성

·

373

2

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예

[질문 내용]
안녕하세요 스프링 AOP 구현부분의 강의를 들으면서

ProceedingJoinPoint가 어떻게 호출되는 객체에 대한 정보나, 실행되는 메서드의 정보에 대해 아는지에 대해 궁금해서 질문 올립니다.

앞의 자동 프록시 등록 과정들을 설명들을 정리해보면,

스프링 부트 자동 설정으로 "AnnotationAwareAspectJAutoProxyCreator" 이라는 자동 프록시 생성기가 빈 등록되어 있는데,

이 자동 프록시 생성기가 @Aspect가 붙은 클래스를 보고 Advisor(어드바이저)로 변환해 저장해준다.

그리고 이 Advisor(어드바이저)를 보고 포인트컷의 대상이 되는 것들을 "ProxyFactory"에 인자로 넘겨 자동으로 프록시를 생성하고 적용해준다.

그런데 여기서 ProceedingJoinPoint는 왜, 무슨 연관관계가 있어서 타겟에 대한 정보들을 알고 있는지에 대해 궁금합니다.

 

 

답변 1

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. HH님

결국 프록시이기 때문에 타켓에 대한 정보를 가지고 있어야 호출을 할 수 있습니다. 타켓에 대한 정보가 있으니 이 정보들을 사용하기 편리하게 ProceedingJoinPoint 같은 객체를 만들 수 있겠지요? 참고로 스프링 AOP는 프록시 객체를 생성하고, 이 프록시 객체는 원본 객체의 메서드를 호출하는 동안 추가적인 동작을 수행합니다. 이 프록시 객체가 메서드를 호출할 때 ProceedingJoinPoint 객체를 생성하고 이를 advice에 전달합니다. 따라서 ProceedingJoinPoint는 프록시가 메서드를 호출하는 시점의 정보를 가지게 됩니다.

추가로 자바 리플렉션 등으로 검색해보시면 도움이 되실거에요.

감사합니다.

HH님의 프로필 이미지
HH

작성한 질문수

질문하기