[Java] 프록시 팩토리 (ProxyFactory)

minhye kim·2024년 5월 1일

Java

목록 보기
3/11

스프링에서는 인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용해주는 프록시 팩토리(ProxyFactory)라는 기능을 제공한다.

JDK 동적 프록시를 사용하려면 InvocationHandler를 만들어야하고 CGLIB를 사용하려면 MethodInterceptor를 만들어야하는데 프록시 팩토리에서는 이 문제를 해결하기 위해 Advice를 사용한다. 어느쪽인지 신경쓰지 않고 Advice만 만들어 적용하면 된다.

ProxyFactory factory = new ProxyFactory(myBusinessInterfaceImpl);
factory.addAdvice(myMethodInterceptor);
factory.addAdvisor(myAdvisor);
MyBusinessInterface tb = (MyBusinessInterface) factory.getProxy();
  1. org.springframework.aop.framework.ProxyFactory 객체를 생성한다. 프록시 팩토리를 생성할때 생성자에 프록시의 호출 대상을 함께 넘겨준다. 프록시 팩토리는 이 인스턴스 정보를 기반으로 프록시를 만들어낸다.

  2. 록시 팩토리를 통해서 만든 프록시가 사용할 부가 기능 로직을 설정한다. JDK 동적 프록시가 제공하는 InvocationHandler와 CGLIB가 제공하는 MethodInterceptor의 개념과 유사하다.

  3. 프록시 팩토리에 적용할 어드바이저를 지정한다. 어드바이저는 내부에 포인트컷과 어드바이스를 모두 가지고 있다. 따라서 어디에 어떤 부가 기능을 적용해야 할지 어드바이저
    하나로 알 수 있다. 프록시 팩토리를 사용할 때 어드바이저는 필수이다.

  4. 프록시 객체를 생성하고 그 결과를 받는다.


Refenrence
https://docs.spring.io/spring-framework/reference/core/aop-api/prog.html
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B3%A0%EA%B8%89%ED%8E%B8/dashboard

profile
안녕하세요. 블로그를 시작하게 되었습니다! 앞으로 유용한 정보와 좋은 내용을 많이 공유할게요:)

0개의 댓글