1. 스프링 컨테이너(Spring container)란?
스프링 프레임워크의 핵심 컴포넌트이며 주요한 용도는 다음과 같다.
- 객체의 생명주기 관리
- 생성된 객체들의 추가적인 기능 제공
스프링에서는 자바 객체를 빈(Bean)이라고 하며 컨테이너는 내부의 빈 라이프사이클(생성, 제거 등)을 하며 추가 기능을 제공한다. 기존 스프링에서는 xml 파일로 설정하나 스프링 부트에서는 자바 클래스에서 설정가능하다. 주요 설정으로는
[수동]
@Configuration - 어플리케이션 구성정보를 등록
@Bean - 메서드를 모두 호출하여 반환된 객체를 스프링 컨테이너에 등록
[자동]
@ComponentScan - 해당 클레스클래스 패키지와 하위의 @Component, @Service, @Repository, @Controller 클래스를 탐색하여 빈등록
@Component - 스프링 런타임시 자동으로 빈을 찾아 등록
이전 포스트의 IoC는 스프링 빈들의 생명 주기를 관리하기 위해 사용하며, 스프링 컨테이너는 DI(의존성 주입)이 이루어진 빈들을 BeanFactory, ApplicationContext 2개의 컨테이너로 제어하고 관리한다.
2023.11.06 - [Spring] - [Spring] IoC(제어의 역전) & DI(의존성 주입)의 개념
2. 왜 스프링 컨테이너를 사용할까?
자바 코드를 작성시 new생성자를 통해 객체를 매번 생성할 경우, 객체 간의 참조가 많아지고 의존성이 높아지게 된다. 이는 객체 지향 프로그램 원칙에 위배되며 객체 간의 의존성 및 결합도를 낮추기 위해 스프링 컨테이너가 사용된다. 스프링 컨테이너는 구현 클래스의 의존성을 제거하고 인터페이스에만 의존하도록 설계 가능하도록 한다.
3. 스프링 컨테이너의 종류
도식을 보면 ApplicationContext 인터페이스가 다른 인터페이스를 다중 상속하고 있다
BeanFactory의 모든 기능을 상속하여 Bean 객체를 관리한다.
BeanFactory
- 스프링 컨테이너의 최상위 인터페이스
- 스프링 빈을 관리하고 조회
ApplicationContext
- BeanFactory의 모든 기능을 상속받아서 제공
- 단순한 빈 관리를 넘어 어플리케이션 개발을 위해 공통적으로 필요한 많은 부가기능을 제공
참고
도서 : 스프링 부트 3 백엔드 개발자 되기 - 자바 편
https://devloper-dreaming.tistory.com/148
'Spring' 카테고리의 다른 글
[Spring] 순환참조란? The dependencies of some of the beans in the application context form a cycle (0) | 2023.11.17 |
---|---|
[Spring] 단위 테스트, JUnit의 개념 및 단위 테스트 코드 작성 방법 (0) | 2023.11.14 |
[Spring] IoC(제어의 역전) & DI(의존성 주입)의 개념 (0) | 2023.11.06 |
[Spring] 스프링부트 + Mybatis 데이터소스 여러개 연결 (스프링 다중 데이터베이스 연결) (0) | 2023.10.20 |
[Spring] 스프링 배치 ItemReader의 개념, (MybatisCursorItemReader, MybatisPagingItemReader 구현) (2) | 2023.10.19 |