본문 바로가기

BOOK/토비의스프링

[1권] 토비의 스프링 6일차

다이내믹 프록시를 위한 팩토리 빈

스프링 빈

  • 기본적으로 클래스 이름과 프로퍼티로 정의된다.
  • 스프링은 지정된 클래스 이름을 가지고 리플렉션을 이용해서 해당 클래스 오브젝트를 만든다.
  • 스프링은 클래스 정보를 가지고 디폴트 생성자로 오브젝트를 만든다.

다이내믹 프록시를 만들어주는 팩토리 빈

  • Proxy의 newProxyInstance() 메소드를 통해서만 생성이 가능한 다이내믹 프록시 오브젝트는 일반적인 방법으로는 스프링의 빈으로 등록할수 없다.
  • 대신 팩토리 빈을 사용하면 가능하다. 팩토리 빈의 getObject() 메소드에 다이내믹 프록시 오브젝트를 만들어주는 코드를 넣으면 되기 때문이다.

MethodInterceptor의 invoke() Method는 ProxyFactoryBean으로부터 타깃 오브젝트에 대한 정보까지도 제공받는다.

  • invoke()만 실행하면 되며, MethodInvocation은 타깃오브젝의 메소드를 실행할 수 있는 기능이 있다.
  • MethodInvocation.proceed()를 수행하면 결과값을 반환하는데, 이는 작은 단위의 템플릿/콜백을 구현한것이다.
  • 즉, 템플릿 역할을 하는 MethodInvocation을 싱글톤으로 두고 공유할수 있다.

  • 상속구조를 살펴보면, MethodInterceptor는 Advise를 상속하고 있다. 그럼으로, MethodInterceptor 오브젝트를 추가하는 Method는 addAdvise()이다.
  • 즉, advise는 타겟 오브젝트에 적용할 부가기능을 담은 오브젝트이다.
  • 다이내믹 프록시는 타겟 오브젝트에 부가기능을 주기 위해, 타깃 오브젝트의 타입을 필요로 하는데, ProxyFactoryBean은 인터페이스 자동검출 기능을 사용해 타겟 오브젝트가 구현하고 있는 인터페이스 정보를 알아낸다.

Point Cut : 부가기능 적용 대상 메소드 선정 방법

  • advisor = advise(부가기능) + pointcut(적용대상)

'BOOK > 토비의스프링' 카테고리의 다른 글

[1권] 토비의 스프링 8일차  (0) 2022.09.03
[1권] 토비의 스프링 7일차  (0) 2022.09.01
[1권] 토비의 스프링 5일차  (0) 2022.08.29
[1권] 토비의 스프링 4일차  (0) 2022.08.28
[1권] 토비의 스프링 3일차  (0) 2022.08.27