지금까지 작성한 코드 파트
SpringConainer 작업 파트
SpringConainer를 생성하고 빈을 등록해서 초기화해주는 작업
ServletContainer 초기화 파트
SpringConainer를 활용하면서 ServletContainer를 코드에서 생성하고, 필요한 FrontController 역할을 하는 DispatcherServlet 을 등록하는 ServletContainer 초기화 코드
ServletContainer를 만들고 서블릿을 초기화하는 등의 작업을 SpringContainer가 초기화되는 과정 중 일어나도록 코드 작성 진행
applicationContext.refresh()
GenericWebApplicationContext
클래스를 상속해서 새로운 클래스를 하나 만들어야 됨
그래야 오버라이딩해서 hook 메서드의 기능을 넣을 수 있음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(); // 컨테이너 초기화(빈 오브젝트 생성)
}
}