위의 2가지를 스프링 컨테이너가 조합하여 사용가능한 완전히 구성된 시스템을 만드는 것
스프링 컨테이너가 코드를 생성해내거나 만들어내는 구조라고 보이지만 Fully configured system이라는 것은 스프링 컨테이너 안에 들어있는 것
스프링 컨테이너가 내부에서 우리가 만든 비즈니스 오브젝트 코드와 구성 메타 데이터를 조합해서 내부에 빈이라고 불렸던 오브젝트들을 구성해서 서버 애플리케이션으로 만들어주는 것
public class HellobootApplication {
public static void main(String[] args) {
// 스프링 컨테이너 생성
GenericXmlApplicationContext applicationContext = new GenericXmlApplicationContext();
applicationContext.registerBean(HelloController.class);
applicationContext.refresh(); // 컨테이너 초기화(빈 오브젝트 생성)
ServletWebServerFactory serverFactory = new TomcatServletWebServerFactory();
WebServer webServer = serverFactory.getWebServer(servletContext -> {
servletContext.addServlet("frontcontroller", new HttpServlet() {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 인증, 보안, 다국어, 공통 기능
if(req.getRequestURI().equals("/hello") && req.getMethod().equals(HttpMethod.GET.name())) {
String name = req.getParameter("name");
HelloController helloController = applicationContext.getBean(HelloController.class);
String ret = helloController.hello(name); // 파라미터 추출
resp.setContentType(MediaType.TEXT_PLAIN_VALUE);
resp.getWriter().println(ret); // 결과값을 웹 응답에 담음
}
else {
resp.setStatus(HttpStatus.NOT_FOUND.value());
}
}
}).addMapping("/*");
}); // 웹서버 생성
webServer.start(); // Tomcat Servelet Container 동작
}
}
스프링 컨테이너를 생성하고, HelloController라는 빈을 관리하는 코드를 작성하였음