Spring AOP의 런타임 위빙 동작 과정
스프링 컨테이너가 빈을 생성한 뒤 빈 후처리기가 포인트컷에 해당하는 빈을 프록시로 바꿔치기하고, 메서드 호출을 가로채 횡단 관심사를 적용하는 런타임 위빙 과정.
Spring AOP의 런타임 위빙 동작 과정
Spring AOP의 런타임 위빙 동작 방식을 다음 이미지 내용을 바탕으로 설명하겠습니다.
Spring AOP의 런타임 위빙 동작 과정
- 빈 객체 생성:
- 스프링 컨테이너는 애플리케이션 컨텍스트 초기화 과정에서
A 객체를 생성합니다.
- 스프링 컨테이너는 애플리케이션 컨텍스트 초기화 과정에서
- 빈 후처리기 전달:
- 생성된
A 객체는 빈 후처리기 (Bean Post Processor)에게 전달됩니다. 빈 후처리기는 스프링 컨테이너에서 빈이 생성되고 초기화된 후에 특정 작업을 수행하기 위해 사용됩니다.
- 생성된
- 프록시 객체로 변환 (바꿔치기):
- 빈 후처리기는
A 객체가 AspectJ 모듈에 정의된 포인트컷(Pointcut)에 해당하는지를 검사합니다. - 만약
A 객체가 포인트컷에 해당하면, 빈 후처리기는A 객체를 프록시 객체(A 프록시)로 바꿔치기합니다. 이 프록시 객체는 AspectJ 모듈에서 정의된 로직을 가로채서 실행할 수 있도록 설계됩니다. - 프록시 객체는 실제
A 객체를 감싸고 있으며,A 객체에 대한 메서드 호출을 가로챕니다.
- 빈 후처리기는
- 프록시 객체 등록:
- 변환된
A 프록시는 스프링 컨테이너의 빈 저장소에beanA라는 이름으로 등록됩니다. - 이후 스프링 애플리케이션은
beanA를 참조할 때A 프록시객체를 사용하게 됩니다.
- 변환된
- 프록시 객체의 메서드 호출:
- 클라이언트가
A 프록시의 메서드를 호출하면, 프록시 객체는 메서드 호출을 가로채고, AspectJ 모듈에서 정의한 로직 (예: 로깅, 트랜잭션 관리 등)을 실행합니다. - 그 후 프록시 객체는 실제
A 객체의 메서드를 호출하여 원래의 비즈니스 로직을 실행합니다. - 최종적으로 프록시 객체는 결과를 클라이언트에게 반환합니다.
- 클라이언트가
요약
- 프록시 객체 생성: 빈 후처리기에서 AspectJ 모듈의 포인트컷에 해당하는 빈을 프록시 객체로 변환합니다.
- 메서드 호출 가로채기: 클라이언트가 프록시 객체의 메서드를 호출할 때 프록시 객체는 호출을 가로채고, 추가 로직을 실행한 후 실제 메서드를 호출합니다.
- 결과 반환: 프록시 객체는 원래 메서드의 결과를 클라이언트에게 반환합니다.
이 과정을 통해 Spring AOP는 런타임 시점에서 빈에 대해 횡단 관심사를 적용하며, 코드의 모듈화와 재사용성을 높입니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
