Spring Boot
Spring 공부 07. web scope, provider, proxy
게슬
2023. 7. 17. 21:45
728x90
이전에 Scope에 Singleton과 prototype에 대해서 했었음
Singleton : Default값임 한번 생성되면 끝까지 스프링 컨테이너에서 하나의 객채로 유지됨
prototype : 생성될때 스프링이 주입만 해주고 끝.
1. request
이거는 HTTP 요청이 들어와서 나갈 때 까지 하나의 객체로 유지되는 Scope임
@Scope(value = "request")
@Component
public class MyLogger {
...
}
2. Provider
@RestController
@RequiredArgsConstructor
public class LogDemoController {
...
private final MyLogger myLogger;
...
}
그런대 이렇게 개발하고 Spring을 실행시키면 실행이 되지 않는다..
왜? -> MyLogger객체는 HTTP request -> responst까지 살아있는데 Spring을 실행시키는 시점에서는 그게 없기 때문임
그래서 필요한 시점에 주입해주는 Provider를 사용한다.
@RestController
@RequiredArgsConstructor
public class LogDemoController {
private final LogDemoService logDemoService;
private final ObjectProvider<MyLogger> myLoggerProvider;
public void method(){
...
MyLogger myLogger = myLoggerProvider.getObject();
이후에 myLogger사용함.
...
}
}
이렇게 하면 객체가 필요할 때 불러 올 수 있다.
3. Proxy
@Component
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyLogger {
...
}
저렇게 proxyMode를 설정해주면 Provider를 사용하지 않아도 된다.
proxyMode = ScopedProxyMode.TARGET_CLASS
가짜 객체를 만들어서 주입해주고, request 시점에 생성한다. (Proxy객체가 생성됨)
진짜 필요한 시점까지 지연시키기.. -> Client Code 를 변경 하지 않아도 됨.
728x90