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도 이런 가짜를 만드는 방법과 유사한 방법을 사용하는데 이 떄 클라이언트 코들르 고치지 않아도 되는 것이 스프링 컨테이너가 가진 어마어마한 장점이다.
'강의 내용 정리 > 스프링 핵심 원리 기본' 카테고리의 다른 글
9-7. 스코프와 Provider (0) | 2022.08.08 |
---|---|
9-5. 웹 스코프 ~ 9-6. request 스코프 예제 만들기 (0) | 2022.08.08 |
9-4. 프로토타입 스코프 - 싱글톤 빈과 함께 사용시 Provider로 문제 해결 (0) | 2022.08.08 |
9-3. 프로토타입 스코프 - 싱글톤 빈과 함께 사용시 문제점 ~ (0) | 2022.08.08 |
9-1. 빈 스코프란? ~ (0) | 2022.08.08 |