HelloBootApplication 뿐만 아니라 다른 메인이 되는 클래스에서도 사용할 수 있도록 다른 클래스로 분리
Servlet Container를 코드에서 자동으로 띄워주면서 Spring Container에서 필요한 정보들을 받아서 기본적인 기능을 수행할 수 있도록 만드는 초기 작업들(Spring Container 준비 작업)을 해주는데 메소드를 재사용 할 수 있음
HellobootApplication
@Configuration
@ComponentScan // 여러가지 정보에 컨테이너를 구성하는 데 필요한 hint들을 넣을 수 있음
public class HellobootApplication {
...
public static void main(String[] args) {
MySpringApplication.run(HellobootApplication.class, args);
}
}
MySpringApplication
public class MySpringApplication {
public static void run(Class<?> applicationClass, String... args) {
...
}
}
main 메서드에서는 static 메서드 하나에 main 메서드가 있는 클래스 정보를 넘기고, main 메서드의 실행 파라미터도 같이 넘겨주는 것
⇒ Spring Initializer가 초기에 생성해준 코드의 형태와 동일!!!!!
지금까지 해온 작업이 바로 SpringBoot가 standalone으로 Servlet Container까지 포함하는 스프링 애플리케이션을 동작시키는 원리가 담겨져있는 코드라고 보면 됨
⇒ 추후 개선할 내용들임
SpringBoot가 만들어준 동일한 원리에 의해서 동작하는 코드를 이용하기 위해 MySpringApplication 클래스를 삭제하고 SpringApplication으로 변경
@Configuration
@ComponentScan // 여러가지 정보에 컨테이너를 구성하는 데 필요한 hint들을 넣을 수 있음
public class HellobootApplication {
@Bean
public ServletWebServerFactory servletContainer() {
return new TomcatServletWebServerFactory();
}
@Bean
public DispatcherServlet dispatcherServlet() {
return new DispatcherServlet();
}
public static void main(String[] args) {
SpringApplication.run(HellobootApplication.class, args);
}
}