티스토리 뷰
스코프와 프록시
이번에는 프록시 방식을 사용해보자.
[핵심 로직]
@Component
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyLogger {
}
# proxyMode = ScopedProxyMode.TARGET_CLASS 가 핵심!
- 적용 대상이 인터페이스가 아닌 클래스면 TARGET_CLASS 를 선택
- 적용 대상이 인터페이스면 INTERFACES 를 선택
이렇게 하면 MyLogger의 가짜 프록시 클래스를 만들어두고
HTTP request와 상관 없이 가짜 프록시 클래스를 다른 빈에 미리 주입해 둘 수 있다.
그래서 전체 MyLogger
@Component
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS) // 여기를 추가
public class MyLogger {
private String uuid; // UUID를 저장하는 변수
private String requestURL; // HTTP 요청의 URL을 저장하는 변수
// 외부에서 HTTP 요청의 URL을 설정하는 메서드
public void setRequestURL(String requestURL) {
this.requestURL = requestURL;
}
// 로그 메시지를 출력하는 메서드
public void log(String message) {
System.out.println("[" + uuid + "]" + "[" + requestURL + "] " +
message);
}
// 빈 초기화 시 UUID를 생성하고 초기화 메시지를 출력하는 메서드
@PostConstruct
public void init() {
uuid = UUID.randomUUID().toString(); // UUID 생성
System.out.println("[" + uuid + "] request scope bean create:" + this);
}
// 빈 소멸 시 소멸 메시지를 출력하는 메서드
@PreDestroy
public void close() {
System.out.println("[" + uuid + "] request scope bean close:" + this);
}
}
이제 나머지 코드를 Provider 사용 이전으로 돌린다.
LogDemoController
@Controller
@RequiredArgsConstructor
public class LogDemoController {
private final LogDemoService logDemoService;
private final MyLogger myLogger; // 원상복구
@RequestMapping("log-demo")
@ResponseBody
public String logDemo(HttpServletRequest request) {
// 원상복구
String requestURL = request.getRequestURL().toString();
myLogger.setRequestURL(requestURL);
myLogger.log("controller test");
logDemoService.logic("testId");
return "OK";
}
}
LogDemoService
@Service
@RequiredArgsConstructor
public class LogDemoService {
private final MyLogger myLogger; // 여기
public void logic(String id) {
myLogger.log("service id = " + id); // 여기
}
}
실행(3번)
문제 없이 실행이 된다!
이거 넣고 콘솔 다시 찍어보면
Provider 주입할 때하고 똑같이 뒤에 특이한 게 붙는다.

설명
728x90
반응형
'[개발] - Spring > 핵심 원리 구현' 카테고리의 다른 글
스코프와 Provider (0) | 2024.02.18 |
---|---|
request 스코프 예제 만들기 (1) | 2024.02.17 |
웹 스코프 (0) | 2024.02.16 |
프로토타입 스코프 - 싱글톤 빈과 함께 사용시 Provider로 문제 해결 (0) | 2024.02.15 |
프로토타입 스코프 - 싱글톤 빈과 함께 사용 시 문제점 (0) | 2024.02.15 |
Comments