2021.07.21 기록장
ToDo
- 알고리즘 2문제
- 책 읽기
- 토비의 스프링
- 북마크 보기
Done
- 알고리즘 2문제
- 책 읽기
- 토비의 스프링
Weekly goal
- 책 읽기
- 토비 스프링 코딩
토비의 스프링
기존의 다이내믹 프록시를 이용한 방법은 직접 타깃을 결정해 줘야 했음.
스프링 proxyFactoryBean을 이용하면 타깃 설정을 안 해줘도 자동으로 함
어드바이스(부가 기능), 포인트 컷(메서드, 클래스 선정 알고리즘)
어드바이스에서 특정 타깃을 받는 것이 아닌 MethodInvocation 타입의 콜백 오브젝트를 받음
포인트 컷에서 프록시를 적용시킬 타입을 정함
그럼 빈 후처리기인 DefaultAdvisorAutoProxyCreator를 통해 모든 빈들을 포인트 컷으로 검사하고 프록시를 적용시킬지 검사함
간단하다 Advisor를 빈으로 등록하면 Creator가 찾아서 사용을 한다.
Advisor는 포인트 컷(클래스, 메서드 선정 알고리즘 NameMatchMethodPointcut를 구현), 어드바이스(부가기능 MethodInterceptor를 구현)로 만들면 된다.
이점은 이제 타깃을 몰라도 부가기능을 사용할 수 있다(어드바이스)
그래도 타깃에 대한 정보는 좀 줘야 하니까 (포인트 컷)
이 둘을 프록시 빈 팩토리로 만들면 매번 다른 service에 따라 다른 프록시 빈 팩토리를 빈으로 등록해야 한다.
타깃을 변경해야 하니까. 이게 단점이다. 어드바이스는 타깃이 필요 없지만 프록시 빈 팩토리는 구현체를 만들어 부가 기능이 끝나고 위임해야 하기에 타겟이 필요하다.
이것을 해결하려면 다른 방식으로 접근을 하자. creator처럼 포인트 컷에 걸리는 클래스나 메서드를 프록시로 감싸는 것이다. 프록시 빈 팩토리와는 다르게 특정 빈만 감싸는 것이 아니라 모든 빈에 대해서 검문을 진행하고 처리하는 것이다.