본문 바로가기

강의 내용 정리/스프링 핵심 원리 기본

9-8. 스코프와 프록시

@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS) 붙이니까 오류안남. ( 가짜를 상속했기 때문에 ) = Provider와 같은 효과.

LogDemoController, LogDemoService 두 개를 Provider 쓰기 전으로 되돌린다 . ( 현재 오류나는 상태 )

그리고 MyLogger에 

 

@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)

 

를 붙이면 원래 value 하나 있으면 그냥 @Scope("request") 만 써도 되는데 여러개면 value = 붙여야함.

뒤는 프록시를 만든다는 뜻이다. CGLIB에가 만들어준 가짜 상속

 

 

 

 

 

찍어보면

@Configuration에서 봤던 조작된 애가 나온다.

 

 

MyLogger의 기능을 실제 호출하는 시점에 진짜를 넣어줌.

여기선 myLogger.setRequestURL(requestURL); 이 시점...

 

내가 만든 MyLogger는 다른이름으로 일단 컨테이너에 등록 해놓는다. 그리고 ac.getBean("myLogger", MyLogger.class) 로 조회 해도 프록시 객체가 조회된다. 

 

 

 

 

 

 

진짜 HTTP 요청이 들어오기 전 까지 가짜(프록시객체) 로 버티는 것이다.

그러다가 진짜 HTTP 요청이 들어와서 메서드를 요청하면 그제서야 진짜의 메서드를 호출해준다.

 

 

단지 어노테이션 설정 변경만으로 원복 객체를 프록시 객체로 대체할 수 있다. 이것이 바로 다형성과 DI 컨테이너가 가진 큰 강점이다.

 

 

 

 

이게 핵심이네..원본객체를 숨겨놓고 싱글톤취급받는 프록시객체를 주입받아놓고 필요할 때 원본객체 가져옴.

 

추가) AOP도 이런 가짜를 만드는 방법과 유사한 방법을 사용하는데 이 떄 클라이언트 코들르 고치지 않아도 되는 것이 스프링 컨테이너가 가진 어마어마한 장점이다. 

 

 

Recent Posts
Popular Posts
Recent Comments