<request 과정>
request -> web.xml -> ContextLoaderListener ->DispatchServlet(컴포넌트 스캔 > 주소 분배)
ContextLoaderListener
- 모든 자원들이 공통적으로 사용할 것들을 만들어둠 ex)DBConnector
- 어노테이션(ex -@Controller, @Restcontroller, @Configration 등)을 가지고 있는 것들을 모두 메모리에 띄움
- 어노테이션을 커스텀 할 수도 있음
servlet-applicationContext
- controllers, viewResolver, HandlerMapping를 메모리에 띄우고 관리함
- 웹만 바라보는 어노테이션을 스캔하고 ContextLoaderListener에 의해 실행됨
root-applicationContext
- service, repositories를 메모리에 띄우고 관리함
- 최상단에서 어노테이션을 스캔하고 DispatchServlet에 의해 실행됨
- DB관련 객체를 생성
Bean Factory
- 객체를 Bean Factory에 등록하게 되면 초기에 메모리에 로드되지 않고 필요할 대 getBean()이라는 메소드를 통하여 메모리에 로드할 수 있다. 이것 또한 IoC이다. (lazy-loading)
ApplicationContext
- ContextloaderListener가 ApplicationContext를 읽고 공통적으로 사용하는 것들을 메모리에 띄워주고 IoC에서 관리함
- root-applicationContext와 servlet-applicationContext 두 가지가 있다.
- 개발자가 직접 new를 통해 객체를 생성하게 되면 해당 객체를 가르키는 레퍼런스 변수를 관리하기 어렵다.
그래서 스프링이 직접 해당 객체를 관리한다. 이 대 우리는 주소를 몰라도 된다. 왜냐하면 필요할 때 DI하면 되기 때문이다. 필요할 때 ApplicationContext에 접근하여 필요한 객체를 가져올 수 있다.
ApplicationContext는 싱글톤으로 관리되기 때문에 어디에서 접근하든 동일한 객체라는 것을 보장해준다.
컴포넌트 스캔
- 스프링부트에서는 모든 src 내부에 있는 모든 파일을 스캔함
static
- main메서드 실행되기 전부터 메모리에 떠있음
일반 자바 파일
- 특정 시간에 메모리에 떴다가 사라짐 (new로 메모리에 띄움)
IoC - 제어의 역전
DI - 의존성 주입
'[Spring Boot] 스프링부트 (IntelliJ) > Spring boot' 카테고리의 다른 글
[Spring Boot] Junit 사용해보기 (0) | 2024.02.26 |
---|---|
[Spring boot] 스프링 컨테이너 - response 하는 방법 (0) | 2024.02.14 |
[Spring boot] FrontController, RequestDispatcher, DispatchServlet (0) | 2024.02.14 |
[Spring boot] web.xml (0) | 2024.02.14 |
[Spring boot]Socket(소켓), http통신, 웹서버, 톰켓 쉽게 이해하기 (0) | 2024.02.13 |