스프링은 프록시 오브젝트를 생성해주는 기술을 추상화한 팩토리 빈을 제공해준다.
ProxyFactoryBean 이 생성하는 프록시에서 사용할 부가기능은 MethodInterceptor 인터페이스를 구현해서 만든다
MethodInterceptor 의 invoke() 메서드
- ProxyFactoryBean 으로부터 타깃 오브젝트에 대한 정보까지 함께 제공받는다.
- 타깃 오브젝트에 상관 없이 독립적으로 만들어질 수 있다.
- 싱글톤 빈으로 등록 가능하다.
ProxyFactoryBean 을 이용한 다이내믹 프록시 테스트
어드바이스: 타깃이 필요없는 순수한 부가기능
ProxyFactoryBean 을 적용한 코드 vs JDK 다이내믹 프록시를 사용한 코드
- InvocationHandler 를 구현했을 때와 달리 MethodInterceptor 를 구현한 UppercaseAdvice 에는 타깃 오브젝트가 등장하지 않는다.
- MethodInterceptor: 메서드 정보와 타깃 오브젝트가 담긴 MethodInvocation 오브젝트 전달
- MethodInvocation
- 타깃 오브젝트의 메서드를 실행할 수 잇는 기능
- 부가기능을 제공하는데만 집중할 수 있다.
MethodInvocation