스프링 컨테이너
DispatchServlet에 의해 생성되어지는 수 많은 객체들은 어디에서 관리될까?
1. ApplicationContext
객체들이 DispatchServlet에 의해 컴포넌트 스캔이 될 때 ApplicationContext에 등록되는 것을 IoC(제어의 역전)이라고 한다. 직접 new를 통해 객체를 생성하면 해당 객체의 레퍼런스 변수를 관리하기 어렵기 때문에 스프링이 직접 해당 객체를 관리한다.
우리는 이 객체의 주소를 몰라도 된다. 필요할 때 DI(의존성 주입)를 통해 사용하면 된다.
DI는 필요한 곳에서 ApplicationContext에 접근해 필요한 객체를 가져오는 방법이다. ApplicationContext는 싱글톤이므로 어디에서 몇번을 접근하든 동일한 객체를 보장한다.
- servlet-applicationContext
- ViewResolver, Interceptor, MultipartResolver 객체를 생성
- 웹과 관련된 어노테이션 Controller, RestController 스캔 (메모리에 로딩)
- DispatcherServlet에 의해 실행
- root-applicationContext
- 어노테이션 Service, Repository 등을 스캔(메모리에 로딩)하고 DB 관련 객체 생성
- ContextLoaderListener에 의해 실행
- ContextLoaderListener는 web.xml이 실행해주기 때문에 root-applicationContext는 servlet-applicationContext보다 먼저 로드
root-applicationContext가 먼저 로드되기 때문에 후에 로드된 servlet-applicationContext는 이를 참조할 수 있지만 그 반대는 불가능하다.
2. Bean Factory
필요한 객체를 Bean Factory에 등록하면 초기에 메모리에 로드되지 않고 필요할 때 getBean()이라는 메소드를 통해 호출하여 메모리에 로드할 수 있다. 이것 또한 IoC이기 때문에 필요할 때 DI로 사용하는 방식이다.
ApplicationContext와 다른 점은 Bean Factory에 로드되는 객체들이 미리 로드되지 않고 필요할 때 호출해서 로드하기 때문에 lazy-loading이 된다는 점이다.
출처
[무료] 스프링부트 개념정리(이론) - 인프런 | 강의
스프링부트를 공부하며 헷갈리는 개념이 많았던 분 스프링부트에 대해 공부하고 싶었던 모든 분, - 강의 소개 | 인프런...
www.inflearn.com
'Spring > Spring 기초 이론' 카테고리의 다른 글
[Spring 기초 이론] 스프링부트의 Response 방식 (0) | 2022.04.01 |
---|---|
[Spring 기초 이론] 디스패처 서블릿 (0) | 2022.03.31 |
[Spring 기초 이론] 웹 배포서술자 (web.xml) (0) | 2022.03.17 |
[Spring 기초 이론] Springboot - 서블릿 컨테이너 (0) | 2022.03.17 |
[Spring 기초 이론] Springboot - Apache Tomcat (0) | 2022.03.03 |