Open otakijae opened 1 year ago
스프링은 유사한 기술들이 있을 때 일관성있게 접근할 수 있는 추상화된 기술 제공
인터페이스 있을 때 JDK동적 프록시 없을 때 CGLIB ==> ProxyFactory
프록시 로직을 InvocationHandler, MethodInterceptor 두 곳에 작성하지 않아도 됨 ==> Advice
부가기능 ==> PointCut
여러 어드바이저를 하나의 target에 적용하려면? proxy를 여러개 만든다? proxy를 여러개 만들기 번거로움 스프링 하나의 프록시팩토리에 여러 어드바이저 넣을 수 있게 설계함 AOP적용된 수 만큼 proxy생성되는 것 아님!!!(최적화)
남은 문제: 설정 파일이 너무 많다, 프록시 적용하는 로직 중복임, 컴포넌트 스캔 사용 못함
==> 빈 후처리기로 해결(다음시간)
reflection
JDK Dynamic Proxy
CGLib Proxy
동적 프록시 생성
ProxyFactory
두 기술을 함께 사용할 때 부가 기능을 적용하기 위해 JDK 동적 프록시가 제공하는 InvocationHandler와 CGLIB가 제공하는 MethodInterceptor를 각각 중복으로 따로 만들어야 할까?
스프링은 이 문제를 해결하기 위해 부가 기능을 적용할 때 Advice 라는 새로운 개념을 도입했다.
개발자는 InvocationHandler 나 MethodInterceptor 를 신경쓰지 않고, Advice 만 만들면 된다.
결과적으로 InvocationHandler 나 MethodInterceptor 는 Advice 를 호출하게 된다.
프록시 팩토리를 사용하면 Advice 를 호출하는 전용 InvocationHandler , MethodInterceptor를 내부에서 사용한다.
특정 조건에 맞을 때 프록시 로직을 적용하는 기능도 Pointcut 이라는 개념을 도입해서 이 문제를 일관성 있게 해결한다.
Advice 만들기
스프링이 지원하는 프록시
ProxyFactory
포인트컷( Pointcut )
어드바이스( Advice )
어드바이저( Advisor )