ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • provider와 프록시
    스프링/HTTP 기본 지식 2023. 2. 4. 16:00
    @Controller
    @RequiredArgsConstructor
    public class LogDemoController {
    
        private final LogDemoService logDemoService;
        private final MyLogger myLogger;
        // 윗 줄은 컨테이너에 요청해서 provider를 계속 만들어주게 한다.
    
    
        @RequestMapping("log-demo")
        @ResponseBody
        public String logDemo(HttpServletRequest request) {
            String requestURL = request.getRequestURI().toString();
            myLogger.setRequestURL(requestURL);
    
            myLogger.log("controller test");
            logDemoService.logic("testId");
            return "OK";
        }
    }

    아래 글에 있는 코드에서 Provider를 사용했었다. 그 이유는 request scope여서 주입을 받아야했는데 주입을 받을 수 있는 공간이 없기 때문이다.

     

    위의 코드처럼 Provider를 사용하지 않으면 scope를 주입받지 못하기 때문에 Exception 오류가 발생한다.

     

    @Component
    @Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class MyLogger {
    
        private String uuid;
    
        private String requestURL;
    
        public void setRequestURL(String requestURL) {
            this.requestURL = requestURL;
        }
    
        public void log(String message) {
            System.out.println("[" + uuid + "]" + "[" + requestURL + "] " + message);
        }
    
        @PostConstruct
        public void init() {
            uuid = UUID.randomUUID().toString();
            System.out.println("[" + uuid + "] request scope bean create: " + this);
        }
    
        @PreDestroy
        public void close() {
            System.out.println("[" + uuid + "] request scope bean close: " + this);
        }
    }
    

    스코프에 프록시를 입력시켜주면 MyLooger의 가짜 프록시 클래스를 만들어주고 HTTP request와 상관 없이 가짜 프록시 클래스를 다른 빈에 미리 주입해 둘 수 있다.

     

    '스프링 > HTTP 기본 지식' 카테고리의 다른 글

    HTTP(4) - HTTP 상태코드  (0) 2023.02.06
    HTTP(3) - API 설계 예  (0) 2023.02.05
    HTTP(2) - 클라이언트에서 서버로 데이터 전송  (0) 2023.02.05
    HTTP(1) - HTTP 메서드  (0) 2023.02.05
    웹 스코프  (0) 2023.02.04
Designed by Tistory.