https://catsbi.oopy.io/b2de2693-fd8c-46e3-908a-188b3dd961f3
이처럼 ObjectProvider를 붙이면 myLoggerProvider가 MyLogger를 주입받는게 아니라 MyLogger를 DL할 수 있는 애가 주입됨.
스프링 구동시 MyLogger 스프링 빈을 등록을 요구하는데 해당 빈은 자신이 생성되야 할 스코프 범위에 해당되지 않았기 때문에 에러가 발생한다.
MyLogger myLogger = myLoggerProvider.getObject(); 에서 최초로 만들어진다. ( DL 받는다. )
myLogger.log로 로그 찍을 때는 이미 uuid, requestURL 들어와있으므로 이쁘게 찍힌다.
logDemoService.logic 에서도 마찬가지. ( 이미 들어와있음. )
둘다 ObjectProvider를 붙여준다.
늦게 뜨게 해야하는 것 (MyLogger)를 ObjectProvider 로 감싸주자.
순서 :
1. 스프링 올라간다( 이 때 컴포넌트스캔하면서 빈들이 올라감 ( 필요한건 DI ) )
2. 요청에 따른 컨트롤러
3. 컨트롤러에 따른 서비스
4. 서비스 -> 레파지토리
5. 거슬러 올라와 응답.
6. 스프링 내리기 ( 싱글톤 빈의 경우 종료 직전에 destroy 된다. )
sleep 걸어놔도 나중에 찍더라도 uuid가 유지가 됨 . ( 요청이 섞여도 구분이 됨. )
자는 사이 다른애들 일 처리.
스프링 컨테이너에게 요청하는 것 자체를 지연시킴. -> 빈이 나중에 생성됨.
이 그림 다시 보면,,,,
클라이언트 A, B가 동시에 요청을 해도 빈을 A 전용, B 전용으로 생성하고 서비스에서 요청해도 A,B는 각각 항상 같은 빈을 줘야함. -> 이게 애초에 목적이었음.
( 와 어렵다 ) -> 다시보니 개쉽다.220815
'강의 내용 정리 > 스프링 핵심 원리 기본' 카테고리의 다른 글
9-8. 스코프와 프록시 (0) | 2022.08.09 |
---|---|
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 |