Spring AOP의 런타임 위빙 동작 과정

@_@·2024년 7월 24일

Spring AOP의 런타임 위빙 동작 방식을 다음 이미지 내용을 바탕으로 설명하겠습니다.

Spring AOP의 런타임 위빙 동작 과정

  1. 빈 객체 생성:

    • 스프링 컨테이너는 애플리케이션 컨텍스트 초기화 과정에서 A 객체를 생성합니다.
  2. 빈 후처리기 전달:

    • 생성된 A 객체는 빈 후처리기 (Bean Post Processor)에게 전달됩니다. 빈 후처리기는 스프링 컨테이너에서 빈이 생성되고 초기화된 후에 특정 작업을 수행하기 위해 사용됩니다.
  3. 프록시 객체로 변환 (바꿔치기):

    • 빈 후처리기는 A 객체가 AspectJ 모듈에 정의된 포인트컷(Pointcut)에 해당하는지를 검사합니다.
    • 만약 A 객체가 포인트컷에 해당하면, 빈 후처리기는 A 객체를 프록시 객체(A 프록시)로 바꿔치기합니다. 이 프록시 객체는 AspectJ 모듈에서 정의된 로직을 가로채서 실행할 수 있도록 설계됩니다.
    • 프록시 객체는 실제 A 객체를 감싸고 있으며, A 객체에 대한 메서드 호출을 가로챕니다.
  4. 프록시 객체 등록:

    • 변환된 A 프록시는 스프링 컨테이너의 빈 저장소에 beanA라는 이름으로 등록됩니다.
    • 이후 스프링 애플리케이션은 beanA를 참조할 때 A 프록시 객체를 사용하게 됩니다.
  5. 프록시 객체의 메서드 호출:

    • 클라이언트가 A 프록시의 메서드를 호출하면, 프록시 객체는 메서드 호출을 가로채고, AspectJ 모듈에서 정의한 로직 (예: 로깅, 트랜잭션 관리 등)을 실행합니다.
    • 그 후 프록시 객체는 실제 A 객체의 메서드를 호출하여 원래의 비즈니스 로직을 실행합니다.
    • 최종적으로 프록시 객체는 결과를 클라이언트에게 반환합니다.

요약

  • 프록시 객체 생성: 빈 후처리기에서 AspectJ 모듈의 포인트컷에 해당하는 빈을 프록시 객체로 변환합니다.
  • 메서드 호출 가로채기: 클라이언트가 프록시 객체의 메서드를 호출할 때 프록시 객체는 호출을 가로채고, 추가 로직을 실행한 후 실제 메서드를 호출합니다.
  • 결과 반환: 프록시 객체는 원래 메서드의 결과를 클라이언트에게 반환합니다.

이 과정을 통해 Spring AOP는 런타임 시점에서 빈에 대해 횡단 관심사를 적용하며, 코드의 모듈화와 재사용성을 높입니다.

profile
STEP BY STEP

0개의 댓글