728x90
스프링 컨테이너 [Spring Container]
주요 컨테이너
- BeanFactory
- ApplicationContext
BeanFactory
스프링 컨테이너의 최상위 인터페이스로 가장 기본적인 컨테이너이며 설정된 빈을 생성하고 관리한다.
지연 로딩(lazy loading)을 지원하여, 빈이 실제로 필요할 때 생성한다.
getBean() 메서드를 지원한다.
ApplicationContext
BeanFactory를 상속받는 인터페이스로 더 많은 기능을 제공한다.
예를 들어, 메시지 소스 지원, 이벤트 발행, AOP 기능 등을 포함한다.
더 많은 부가기능들이 지원되어 일반적으로 더 많이 사용된다.
결론적으로 부가기능이 포함된 ApplicationContext를 주로 사용하므로 BeanFactory를 사용할 일은 거의 없다.
다양한 형식 지원
다양한 형식의 설정 정보를 받아들일 수 있게 유연하게 설계되어 있다.
Xml 기반의 설정
- ClassPathXmlApplicationContext: XML 파일을 클래스패스에서만 로드
- FileSystemXmlApplicationContext: XML 파일을 파일 시스템에서만 로드
- GenericXmlApplicationContext: XML 파일을 클래스패스와 파일 시스템 모두에서 로드
Xml 파일의 정보를 통해 구성하는 방식으로 로딩 경로도 유연하게 설정이 가능하다.
자바 Annotation을 사용한 설정
- AnnotationConfigApplicationContext: 자바 Annotation을 사용하여 컨테이너를 구성
자바 클래스를 통해 구성하는 방식
스프링 빈 메타정보 - BeanDefinition
1. 주요 속성
- Class:
- 빈의 클래스 타입을 정의
- 스프링 컨테이너는 이 클래스를 사용하여 빈의 인스턴스를 생성
- Scope:
- 빈의 스코프를 정의
- singleton: 스프링 컨테이너당 하나의 인스턴스만 생성 (기본)
- prototype: 요청 시마다 새로운 인스턴스를 생성
- 빈의 스코프를 정의
- Constructor Arguments:
- 빈의 생성자에 전달될 인자들을 정의
- 이를 통해 특정 생성자를 사용할 수 있음
- Properties:
- 빈의 속성 값을 정의
- 주입할 의존성을 설정할 때 사용
- Autowire Mode:
- 의존성 주입 방식을 정의
- byName, byType, constructor 등
- Init Method:
- 빈 초기화 시 호출될 메서드를 정의
- Destroy Method:
- 빈이 소멸될 때 호출될 메서드를 정의
- Lazy Initialization:
- 빈의 지연 초기화 여부를 정의
- 기본적으로 스프링은 빈을 미리 초기화하지만, lazy-init을 설정하면 실제로 필요할 때 초기화
- Primary:
- 같은 타입의 여러 빈 중에서 기본적으로 주입될 빈을 정의
2. 생성 과정
- 설정 파일 로드
- 자바 클래스 파일
- Xml 파일
- BeanDefinition 객체 생성
- BeanDefinition은 빈의 메타정보를 담고 있으며, 이를 통해 빈의 생성, 초기화, 주입 등을 관리
- BeanDefinition 등록
- 생성된 BeanDefinition 객체는 스프링 컨테이너에 등록
- 스프링 컨테이너는 BeanDefinitionRegistry를 통해 이 객체들을 관리
- 빈의 생성 및 의존성 주입
- 빈의 인스턴스화: BeanDefinition에 정의된 클래스 타입을 사용하여 빈의 인스턴스를 생성
- 의존성 주입: 생성된 빈의 속성에 대해 설정된 의존성을 주입 (생성자 주입, 세터 주입 등)
- 빈의 초기화: 빈의 초기화 메서드가 정의되어 있으면 이를 호출하여 초기화 작업을 수행
- 빈의 사용 및 관리
- 생성된 빈은 스프링 컨테이너에 의해 관리되며, 애플리케이션의 요청에 따라 빈을 제공
- 컨테이너는 빈의 생명주기를 관리하고, 필요시 빈을 소멸시키는 등의 작업을 수행
스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런 강의 내용 참고
728x90
'백엔드 > Spring' 카테고리의 다른 글
[Spring] 서블릿 & JSP MVC (0) | 2024.07.22 |
---|---|
[Spring] 자바 Servlet & JSP (3) | 2024.07.22 |
[Spring] 빈 스코프 (0) | 2024.07.12 |
[Spring] 의존관계 주입 (1) | 2024.07.12 |
[Spring] 컴포넌트 스캔 - Component Scan (0) | 2024.07.11 |