앞서 설명했던 동적 프록시의 문제점은 다음과 같다.
스프링은 보통 유사한 구체적인 기술들이 있을 때 그것들을 통합해서 일관성 있게 접근할 수 있는 추상화된 기술을 제공한다.
그게 바로 프록시 팩토리(ProxyFactory
)임. 동적 프록시 기능을 통합한 추상화 클래스.
이 프록시 팩토리는 인터페이스가 있으면 JDK 동적 프록시를 사용하고 구체만 있으면 CGLIB를 사용한다.
프록시 팩토리를 사용하면 의존관계와 사용흐름이 다음과 같다.
두 기술을 함께 사용할 때 그럼 프록시 팩토리가 만들어주긴 하지만 InvocationHandler
MethodInterceptor
를 어쨌든 중복으로 생성해야 할까?
스프링은 이 문제도 해결한다. Advice
라는 새로운 개념을 도입해서 해결함. 인터페이스가 뭔지 신경쓰지 않아도 된다.
결론만 말하면 이렇게 된다. 개발자는 인터페이스가 뭐든간에 Adivce안에 로직만 넣어주면 된다. 그럼 어떤 인터페이스든간에 Advice를 호출한다.