본문 바로가기
Spring

토비의 스프링 부트

by irerin07 2023. 11. 28.
728x90

스프링 컨테이너는 크게 두가지가 필요하다.

1. 우리의 비즈니스 로직을 담고 있는 애플리케이션 코드

2. 이러한 코드들로 애플리케이션을 어떤 식으로 구성할지에 대한 정보를 담고 있는 Configuration Metadata.

스프링 컨테이너가 내부에서 위 두가지를 조합하여 내부에 Bean이라 불리는 오브젝트들을 구성하여 Server Application으로 만든다. 

 

스프링 컨테이너에 HelloController를 집어넣고, 그 컨트롤러를 직접 생성하는 것이 아닌, 스프링 컨테이너에 요청을 하여 가져온 다음 사용하는 방식

 

스프링 컨테이너를 대표하는 인터페이스 ApplicationContext가 있는데 스프링 컨테이너의 역할을 한다.

스프링 컨테이너는 오브젝트를 직접 넣어 설정할 수도 있지만, 어떤 클래스를 이용해 Bean 오브젝트를 생성할 것인지에 대한 메타 정보를 넣어주는 방식을 사용한다.

 

자기가 가지고 있는 구성 정보를 바탕으로 컨테이너를 초기화 하는 작업을 refresh() 메서드를 통해 실행한다.

그렇게 되면 ApplicationContext가 가지고 있는 Bean Object를 만들어 준다.

 

Dependency Injection

소스코드상에는 나와 있지 않지만 런타임시에 실제 연관관계를 매핑 해주는 것

Assembler를 사용하여 DI를 진행한다.

Assembler는 직접 의존관계가 없어 보이는 오브젝트들을 가져다가 서로 관계를 연결시켜주고, 사용할 수 있게 해준다.  

이 Assembler의 역할을 하는 것이 바로 Spring Container 

 

DispatcherServlet

 

ApplicationContextAware

DispatcherServlet은 ApplicationContextAware를 구현하는 FrameworkServlet을 상속받고 있다.

ApplicationContextAware는 컨테이너가 빈을 등록하고 관리하는 중에 컨테이너가 관리하는 오브젝트를 빈에다가 주입해주는 라이프사이클 메서드이다.

ApplicationContextAware 인터페이스를 구현한 어떤 클래스가 스프링의 빈으로 컨테이너에 등록이 되면 스프링 컨테이너는 해당 인터페이스의 메서드를 사용하여 주입해준다. 

728x90