개발일기장

Spring 공부 07. web scope, provider, proxy 본문

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
Comments