개발놀이터

@Aspect 본문

Spring/Spring

@Aspect

마늘냄새폴폴 2022. 1. 20. 18:11

이 포스팅은 인프런 김영한 님의 스프링 핵심 원리 고급 편을 보고 각색한 포스팅입니다. 자세한 내용은 강의를 확인해주세요

 

스프링은 @Aspect 어노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원한다. 

 

바로 사용방법을 알아보자

1. 사용할 클래스에 @Aspect를 붙여준다.

2. 적용할 Advice에 @Around를 붙여준다 Around는 포인트컷이 된다. 

3. 반환 타입은 Object 인자값으로 ProceedingJoinPoint를 넣어서 Advice로직을 만든다.

 

 

이어서 @Aspect를 어드바이저로 변환해서 저장하는 과정을 알아보자

 

1. 실행 : 스프링 애플리케이션 로딩 시점에 자동 프록시 생성기를 호출한다.

2. 모든 @Aspect 빈 조회 : 자동 프록시 생성기는 스프링 컨테이너에서 @Aspect 언노테이션이 붙은 스프링빈을 모두 조회한다.

3. 어드바이저 생성 : @Aspect 어드바이저 빌더를 통해 @Aspect 어노테이션 정보를 기반으로 어드바이저를 생성한다.

4. @Aspect 기반 어드바이저 저장 : 생성한 어드바이저를 @Aspect 어드바이저 빌더 내부에 저장한다.

 

 

어드바이저를 기반으로 프록시를 생성하는 과정을 알아보자

1. 생성 : 스프링 빈 대상이 되는 객체를 생성한다. (@Bean, 컴포넌트 스캔 모두 포함)

2. 전달 : 생성된 객체를 빈 저장소에 등록하기 직전에 빈 후처리기에 전달한다.

3-1. Advisor 빈 조회 : 스프링 컨테이너에서 Advisor 빈을 모두 조회한다.

3-2. @Aspect Advisor 조회 : @Aspect 어드바이저 빌더 내부에 저장된 Advisor를 모두 조회한다.

4. 프록시 적용 대상 체크 : 앞서 3-1, 3-2에서 조회한 Advisor에 포함되어 있는 포인트컷을 사용해서 해당 객체가 프록시를 적용할 대상인지 아닌지 판단한다. 이때 객체의 클래스 정보는 물론이고 해당 객체의 모든 메서드를 포인트컷에 하나하나 모두 맻이해본다. 그래서 조건이 하나라도 만족하면 프록시 적용 대상이 된다.

5. 프록시 생성 : 프록시 적용 대상이면 프록시를 생성하고 프록시를 반환한다. 그래서 프록시를 스프링 빈으로 등록한다. 만약 프록시 적용 대상이 아니라면 원본 객체를 반환해서 원본 객체를 스프링 빈으로 등록하낟.

6. 빈 등록 : 반환된 객체는 스프링 빈으로 등록된다.

 

'Spring > Spring' 카테고리의 다른 글

스프링 AOP - 실전 예제  (0) 2022.01.24
스프링 AOP - 포인트컷  (0) 2022.01.24
빈 후처리기  (0) 2022.01.20
포인트컷, 어드바이스, 어드바이저  (0) 2022.01.19
프록시 팩토리  (0) 2022.01.19