본문 바로가기

강의/토비의 스프링부트

di 적용

 

 

dispatcherservlet은 servlet container인 application context를 생성자로 받았음

그걸 이용해서 dispatcher servlet은 bean을 다 훑어 보고 url mapping 정보를 살펴봄.

getMapping이나 requestMapping annotation 정보가 존재하면 이것은 web 요청을 처리할 수 있도록

만들어진 web controller구나 라고 인식을 하고 그 안에 요청 정보를 추출한다.

 

mapping 테이블을 만들어서 관리하고

이후에 웹요청이 들어오면 mapping 테이블을 확인하고 메서드를 연결해준다.

package com.example.tobyboot;

import com.example.tobyboot.toby.HelloController;
import com.example.tobyboot.toby.SimpleHelloService;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServer;
import org.springframework.web.context.support.GenericWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;


public class TobybootApplication {

    public static void main(String[] args) {
        // spring container 만드는 작업
        GenericWebApplicationContext applicationContext = new GenericWebApplicationContext();
        // bean 등록
        applicationContext.registerBean(HelloController.class);
        applicationContext.registerBean(SimpleHelloService.class);
        // 초기화 작업
        applicationContext.refresh();

        // servlet container를 코드로 실행하면서 servlet을 등록하는 작업
        TomcatServletWebServerFactory serverFactory = new TomcatServletWebServerFactory();
        WebServer webServer = serverFactory.getWebServer(servletContext -> {
            servletContext.addServlet("dispatcherServlet",
                    new DispatcherServlet(applicationContext)
            ).addMapping("/*");
        });
        // 톰캣 서블릿 컨테이너가 동작한다.
        webServer.start();

        System.out.println("Hello containerless Standalone Application");
    }
}

 

servlet container를 생성하고 servlet 초기화 작업은 spring container 초기화 되는 과정에 일어나도록 코드를 수정할 예정

spring container 초기화 작업은 applicationcontext.refresh()에서 시작된다.

 

 

package com.example.tobyboot;

import com.example.tobyboot.toby.HelloController;
import com.example.tobyboot.toby.SimpleHelloService;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServer;
import org.springframework.web.context.support.GenericWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;


public class TobybootApplication {

    public static void main(String[] args) {
        // spring container 만드는 작업
        // 익명 클래스
        GenericWebApplicationContext applicationContext = new GenericWebApplicationContext() {
            @Override
            protected void onRefresh() {
                // 생략 하면 안됨.
                super.onRefresh();
                // 서블릿 컨테이너를 초기화하는 코드
                TomcatServletWebServerFactory serverFactory = new TomcatServletWebServerFactory();
                // servlet container를 코드로 실행하면서 servlet을 등록하는 작업
                WebServer webServer = serverFactory.getWebServer(servletContext -> {
                    servletContext.addServlet("dispatcherServlet",
                            new DispatcherServlet(this)
                    ).addMapping("/*");
                });
                // 톰캣 서블릿 컨테이너가 동작한다.
                webServer.start();
            }
        };
        // bean 등록
        applicationContext.registerBean(HelloController.class);
        applicationContext.registerBean(SimpleHelloService.class);
        // 초기화 작업
        applicationContext.refresh();

        System.out.println("Hello containerless Standalone Application");
    }
}

'강의 > 토비의 스프링부트' 카테고리의 다른 글

Bean의 생명주기 메소  (0) 2023.02.21
자바코드 구성 정보 사용  (0) 2023.02.21
Dependency injection  (0) 2023.02.20
프론트 컨트롤러 // 스프링 컨테이너  (0) 2023.02.20
dsf  (0) 2023.02.19