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