스프링 AOP는 JDK 다이나믹 프록시
를 이용한 방법과 CGLIB
을 이용한 프록시를 이용하는 방법 2가지가 있다.
결국 AOP는 프록시를 통해 구현할 수 있다.
다이나믹 프록시를 이용한 방법은 치명적인 제약사항이 있다.
1. 프록시객체를 만들고자하는 대상이 인터페이스 또는 인터페이스를 implements 하고 있는 클래스여야 한다는 것이다.
일반적으로 Spring이 제공하는 AOP기술을 사용할 때 AOP를 적용하려고 하는 클래스에 어떤 인터페이스를 꼭 implements하지 않아도 됐다.
즉 기본적으로 사용되는 방법은 CGLIB을 이용한 프록시를 활용하는 방법이다. (다이나믹 프록시를 이용하려면 별도의 설정을 함)
2. 특정 메소드에 국한되지 않고 인터페이스의 모든 메소드에 대해 적용된다는 점이다.
Pointcut으로 메소드를 지정하는 방법은 결국 CGLIB을 이용할 수 밖에 없다는 것이다.