프록시를 이용한 AOP 구현 스프링은 세 가지 방식으로 AOP를 구현할 수 있도록 하고 있다. 어떤 방식을 사용하더라도 내부적으로는 프록시를 이용하여 AOP가 구현되므로 메서드 호출에 대해서만 AOP를 적용할 수 있다. XML 스키마 기반의 POJO 클래스를 이용한 AOP 구현 AspectJ에서 정의한 @Aspect 어노테이션 기반의 AOP 구현 스프링 API를 이용한 AOP 구현 스프링은 Aspect의 적용 대상(target)이 되는 객체에 대한 프록시를 만들어 제공하며, 대상 객체에 직접 접근하지 않고 프록시를 통해 간접적으로 접근하게 된다. 스프링 컨테이너를 초기화하는 과정에서 설정 정보에 지정한 빈 객체에 대한 프록시 객체를 생성하고, 원본 빈 객체 대신에 프록시 객체를 사용하도록 한다. 대상 객..