해결된 질문
작성
·
244
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네
[질문 내용]
클라이언트1,2,3,4,5이 동시에요청했을때
myLoggerProvider.getObject()실행해서 my Logger 객체를 받아올때 (컨트롤러or서비스)
request요청이 여러개니까 myLogger객체는 이때 여러개인데...
똑같은 객체가 계속 반환되는걸 보장해주는 이유가 있나요?
@PostConstruct
public void init(){
uuid = UUID.randomUUID().toString();
System.out.println("[" + uuid + "]" + "request scope bean create: "+this);
}
거의 동시에 요청이왔다고 가정했을때
init해서 각 request스코프객체에 UUID각각설정후
getObject()를 각자 두번씩해서 myLogger를 얻게되는데
이때 myLogger타입 객체는 여러개가있을수있고
이걸 init했을때-처음getObject()-두번쨰getObject-close
이런순서로 진행될때
처음 init할떄랑 close할때는 객체주소가 같은건 당연하지만
그사이에 getObject()했을때 객체가 바뀔우려가 있는건 아닌지 생각이듭니다
@RequestMapping("log-demo")
@ResponseBody
public String logDemo(HttpServletRequest request) throws InterruptedException {
MyLogger myLogger = myLoggerObjectProvider.getObject(); <================여기
String requestURL = request.getRequestURL().toString();
myLogger.setRequestURL(requestURL);
myLogger.log("controller test");
logDemoService.logic("testId");
return "OK";
}
public class LogDemoService {
private final ObjectProvider<MyLogger> myLoggerObjectProvider;
public void logic(String id) {
MyLogger myLogger = myLoggerObjectProvider.getObject();<==========여기
myLogger.log("service id = "+ id);
}
답변 3
0
0
혹시
AnnotationConfigServletWebServerApplicationContext로 동작하니까
Httprequest헤더의 정보롤 읽어서
같은 bean을 계속 반환할수 있도록 한다는 건가요?
6분에 멈춰놓고 고민했는데
7분부터 간단한 설명이나오네요
그렇다면 HttpRequest에서 어떤정보를 읽어서 구분을 하는걸까요?
어플리케이션계층에서 식별할만한 특별한게 있는지 잘모르겠네요
MyloggerObjectProvider는 싱글톤이고 getObject해서 Mylogger조회해서 가져올때 대상은 여러개가되는데...
이때 어떻게 조회를해서 분별하냐는 질문이였습니다.
init할때 식별자를 부여한다던가...?