지금까지 작성한 코드 파트

  1. SpringConainer 작업 파트

    SpringConainer를 생성하고 빈을 등록해서 초기화해주는 작업

  2. ServletContainer 초기화 파트

    SpringConainer를 활용하면서 ServletContainer를 코드에서 생성하고, 필요한 FrontController 역할을 하는 DispatcherServlet 을 등록하는 ServletContainer 초기화 코드

스프링 컨테이너로 통합

ServletContainer를 만들고 서블릿을 초기화하는 등의 작업을 SpringContainer가 초기화되는 과정 중 일어나도록 코드 작성 진행

어느 시점에 ServletContainer 초기화 작업을 넣어야 하는가?

public class HellobootApplication {

	public static void main(String[] args) {
		// 스프링 컨테이너 생성
		GenericWebApplicationContext applicationContext = new GenericWebApplicationContext() {
			@Override
			protected void onRefresh() {
				super.onRefresh(); // 생략 X

				ServletWebServerFactory serverFactory = new TomcatServletWebServerFactory();
				WebServer webServer = serverFactory.getWebServer(servletContext -> {
					servletContext.addServlet("dispatcherServlet",
							new DispatcherServlet(this) // DispatcherServlet은 WebApplication 컨텍스트 타입을 사용해야 됨
					).addMapping("/*");
				}); // 웹서버 생성
				webServer.start(); // Tomcat Servelet Container 동작
			}
		};
		applicationContext.registerBean(HelloController.class); // 빈 등록
		applicationContext.registerBean(SimpleHelloService.class); // 빈 등록
		applicationContext.refresh(); // 컨테이너 초기화(빈 오브젝트 생성)
	}
}

주요 변경 사항