Spring AOP는 런타임시 Bean을 만들 때 IoC컨테이너에 의해 Bean을 Proxy로 감싼 Proxy Bean을 동적으로 생성해준다.
Proxy Bean은 타깃 메소드가 호출되는 시점에 메소드를 가로채어 부가기능(Aspect)을 동적으로 주입을 해준다.
이를 런타임시 동적으로 위빙한다고 하여 런타임 위빙(Runtime Weaving) 이라고 한다.
Spring AOP는 런타임 위빙 기반으로 동작하며, 상황에 따라 JDK Dynamic Proxy(Default) 혹은 CGLIB 방식으로 Proxy Bean을 생성한다.
타겟이 하나 이상의 인터페이스를 구현하고 있는 클래스라면 JDK Dynamic Proxy 방식으로, 인터페이스를 구현하고 있지 않은 클래스라면 CGLIB 방식으로 AOP 프록시를 생성해준다.
Dynamic Proxy
Dynamic Proxy는 인터페이스가 필수적으로 요구된다.
https://velog.io/@hanblueblue/Spring-Proxy-1-Java-Dynamic-Proxy-vs.-CGLIB
https://gmoon92.github.io/spring/aop/2019/04/20/jdk-dynamic-proxy-and-cglib.html