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

sorikim98님의 프로필 이미지
sorikim98

작성한 질문수

스프링 핵심 원리 - 고급편

@Aspect 프록시 - 적용

Advisor의 빈 저장소 등록 시점이 빈 처러기의 대상이 될 객체의 빈 저장소 등록 시점 보다 어떻게 더 빠를 수 있나요?

작성

·

440

1

1. 생성: 스프링이 스프링 빈 대상이 되는 객체를 생성한다. ( @Bean , 컴포넌트 스캔 모두 포함)
2. 전달: 생성된 객체를 빈 저장소에 등록하기 직전에 빈 후처리기에 전달한다.
3. 모든 Advisor 빈 조회: 자동 프록시 생성기 - 빈 후처리기는 스프링 컨테이너에서 모든 Advisor 를 조회한다.
4. 프록시 적용 대상 체크: 앞서 조회한 Advisor 에 포함되어 있는 포인트컷을 사용해서 해당 객체가 프록시를 적용할 대상인지 아닌지 판단한다. 이때 객체의 클래스 정보는 물론이고, 해당 객체의 모든 메서드를 포인트컷에 하나하나 모두 매칭해본다. 그래서 조건이 하나라도 만족하면 프록시 적용 대상이 된다. 예를 들어서 10개의 메서드 중에 하나만 포인트컷 조건에 만족해도 프록시 적용 대상이 된다.

제가 이해한 바로는

3.에서 스프링 컨테이너에 Advisor들은 이미 스프링 컨테이너에 등록 되어있는 것을 찾아오고 빈 후처리기에서 Advisor를 적용하여 프록시 객체를 생성할 target객체들은 생성만 되어있고 스프링 컨테이너에는 등록이 안되어 있는 것으로 이해했습니다. 이렇게 되려면 스프링이 Advisor를 구분해서 먼저 스프링 컨테이너에 등록 할 수 있어야 할 것 같은데 제가 제대로 생각하고 있는 것이 맞을까요?

 

답변 1

1

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

안녕하세요. sorikim98님

스프링이 내부에서 빈을 등록할 때 이런 부분을 고려해서 우선순위를 잡는 것으로 알고 있습니다.

실제 어떻게 구현되어 있는지는 저도 파보지 않아서 잘 모르겠네요^^

혹시 아시는 분 있으면 답변 부탁드립니다.

감사합니다.

sorikim98님의 프로필 이미지
sorikim98
질문자

답변 감사합니다!

sorikim98님의 프로필 이미지
sorikim98

작성한 질문수

질문하기