본문 바로가기

Spring

[Spring] 프록시 팩토리

프록시 팩토리

jdk 동적 프록시, cglib 를 통합 추상화하여 스프링에서 제공해주는 라이브러리

인터페이스가 있는 경우에는 jdk 동적 프록시를 사용하고, 구체 클래스가 있을경우에는 CGLIB를 사용해준다.

 * CGLIB 만 사용하도록 설정 가능

 

프록시 팩토리의 'Advice' 를 통해 두개의 상황을 구분하지 않고 'Advice' 를 만들어주기만 하면 된다.

* 프록시 팩토리 내부에서 InvocationHandler 와 MethodInterceptor 를 내부에서 사용

 

어드바이저, 어드바이스, 포인트컷

 

어드바이스 - 프록시가 호출하는 부가 기능. 프록시 로직

org.aopalliance.intercept.MethodInterceptor // 인터페이스 구현

포인트컷 - 부가 기능을 적용할지, 적용하지 않을지 판단하는 필터링 로직. 주로 클래스나 메서드 이름으로 필터링 한다 -> 직접 구현 거의 x

어드바이저 - 하나의 포인트컷과 하나의 어드바이스를 가지고 있는 것.

* 역할과 책음을 명확하게 분리하기 위해 명칭으로 구분

 

어드바이저를 적용한 로직 구조

클라이언트 호출 -> 프록시 팩토리가 포인트컷 호출 -> 필터를 통과하면 어드바이스를 통해 부가 기능 추가 -> 타겟 호출

* 프록시에 어드바이저를 여러게 등록하게 되면 프록시는 하나만 생성되고 한 프록시에 모든 어드바이저가 적용 (프록시 여러개 생성 x)

 

프록시 팩토리 문제점

  1. 설정이 많음 - 프록시를 적용할 빈의 개수 만큼 프록시를 생성하는 코드를 만들어 줘야한다.
  2. 컴포넌트 스캔 - 컴포넌트 스캔을 통해 빈에 등록된 객체는 해당 방식으로 프록시 등록이 불가능하다.

-> 문제를 해결할 수 있는 방법으로 빈 후처리기가 있다.

 

 

 

 

'Spring' 카테고리의 다른 글

[Spring] 객체 지향 설계 5가지 - SOLID  (0) 2021.11.10
[Spring] 빈 후처리기 - BeanPostProcessor  (0) 2021.11.08
[Spring] 프록시 패턴  (0) 2021.11.05
[Spring] 전략 패턴  (0) 2021.11.05
[Spring] 템플릿 메서드 패턴  (0) 2021.11.05