스프링은 유사한 기술들이 있을 때 일관성있게 접근할 수 있는 추상화된 기술 제공
인터페이스 있을 때 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생성되는 것 아님!!!(최적화)
남은 문제:
설정 파일이 너무 많다, 프록시 적용하는 로직 중복임, 컴포넌트 스캔 사용 못함
==> 빈 후처리기로 해결(다음시간)