해결된 질문
작성
·
612
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
안녕하세요! LocalThread 수강 중 궁금증이 생겨 질문드립니다.
다음과 같이 LogTrace를 Prototype Bean으로 등록 후 컨트롤러에서 주입받아 사용하는 상황은 Thread safe 하다고 말할 수 있는지 궁금합니다
package hello.advanced.app.v3;
import hello.advanced.trace.TraceStatus;
import hello.advanced.trace.hellotrace.HelloTraceV2;
import hello.advanced.trace.logtrace.LogTrace;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
public class OrderControllerV3 {
private final OrderServiceV3 orderService;
private final ObjectProvider<LogTrace> provider;
@GetMapping("/v3/request")
public String request(String itemId) {
TraceStatus status = null;
LogTrace trace = provider.getObject();
try {
status = trace.begin("OrderController.request()");
orderService.orderItem(trace, itemId);
trace.end(status);
return "ok";
} catch (Exception e) {
trace.exception(status, e);
throw e;
}
}
}
만약 그렇다면, ThreadLocal을 통해 할당하고 접근하는 것과 어떤 차이가 있는지 궁금합니다.
프로토타입 빈에 대한 이해가 부족한 것 같아 터무니없는 질문일 수 있지만, 잘 이해가 가지않아 질문드립니다