HelloController 객체를 Spring Container안으로 이동

image.png

스프링 컨테이너 동작방식

image.png

스프링 컨테이너 구성에 필요한 요소 2가지

  1. 비즈니스 로직을 담고있는 비즈니스 오브젝트(POJO)
  2. 어떤식으로 구성할지에 대한 구성정보를 담고있는 Configuration Metadata

위의 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라는 빈을 관리하는 코드를 작성하였음

주요 코드 설명