카테고리 없음

[스프링 핵심 원리 고급편] 스프링이 지원하는 프록시

 

스프링은 유사한 기술들이 있을 때 일관성있게 접근할 수 있는 추상화된 기술 제공

 

인터페이스 있을 때 JDK동적 프록시 없을 때 CGLIB

==> ProxyFactory

 

프록시 로직을 InvocationHandler, MethodInterceptor 두 곳에 작성하지 않아도 됨

==> Advice

 

부가기능

==> PointCut

 

 

 

Advice

- 프록시 로직

- spring AOP의 MethodInterceptor을 구현

 

CGLIB 강제 옵션

- setProxyTargetClass(true)

- 실무에서 종종 사용됨

- 스프링 2.0부터 구체클래스 기반으로 기본 생성

 

PointCut

- 어디에 부가 기능을 적용할지 판단하는 필터링 로직

- ClassFilter(클래스가 해당하는지) + MethodFilter(메서드에 해당하는지)로 이루어짐, 모두 통과해야 적용

- MethodMatcher의 isRuntime true면 args를 파라미터로 받는 matches()가 호출됨. false 면 메서드나 클래스 캐싱 가능 장점 있음

 

Advisor

- 포인트컷1 + 어드바이스1

- 어떤 부가 로직을 어디에 적용할지 알고 있는 것

- 프록시 팩토리 사용 시 필수

 

 

여러 어드바이저를 하나의 target에 적용하려면? proxy를 여러개 만든다?

proxy를 여러개 만들기 번거로움

스프링  하나의 프록시팩토리에 여러 어드바이저 넣을 수 있게 설계함 

AOP적용된 수 만큼 proxy생성되는 것 아님!!!(최적화) 

 

 

남은 문제:

설정 파일이 너무 많다, 프록시 적용하는 로직 중복임, 컴포넌트 스캔 사용 못함 

 

==> 빈 후처리기로 해결(다음시간)