본문 바로가기

아는 만큼 보인다/Spring Framework

다이나믹프록시 + 팩토리빈 ==> 프록시 팩토리빈

스프링이 다이나믹프록시와 팩토리빈을 썩어서 제공하는 추상화된 서비스 => 프록시 팩토리빈


프록시 팩토리빈은 다이나믹프록시처럼 타겟의 인터페이스를 구현한 프록시 오브젝트를 손쉽게 만들어준다.

getObject()

프록시 팩토리빈은 팩토리빈처럼 스프링에 빈으로 등록할 수 있다.


프록시 팩토리빈과 팩토리빈이 다른 점은

다이나믹하게 생성되는 프록시오브젝트가 부가기능을 추가하여 타겟을 호출하는 invoke()메소드의 인터페이스가 다르다.
팩토리빈은 InvocationHandler 인터페이스
프록시 팩토리빈은 MethodInterceptor 인터페이스

또 다른 점은 부가기능을 적용할 메소드 선정 알고리즘이다.
팩토리빈은 InvocationHandler 인터페이스의 invoke 메소드 구현시 해당 알고리즘을 구현해야 한다.
프록시 팩토리는 Pointcut을 주입하여 적용한다.


프록시 팩토리빈에서는 MethodInterceptor 인터페이스의 구현체를 Advice라 한다.

그리고 Pointcut과 Advice를 한 묶음으로 만들어 Advisor라고 한다.

Pointcut과 Advice는 빈으로 등록하여 여러개의 프록시 팩토리빈에서 얼마든지 재사용가능하다

반면에 (타겟을 알고있어야 하는) InvocationHandler의 구현체는 팩토리빈에 하나씩 만들어질 수 밖에 없다.