백엔드/Spring

[Spring] 스프링 컨테이너 - Spring Container

kwang2134 2024. 7. 11. 16:02
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. 생성 과정

 

  1. 설정 파일 로드
    • 자바 클래스 파일
    • Xml 파일
  2. BeanDefinition 객체 생성
    • BeanDefinition은 빈의 메타정보를 담고 있으며, 이를 통해 빈의 생성, 초기화, 주입 등을 관리
  3. BeanDefinition 등록
    • 생성된 BeanDefinition 객체는 스프링 컨테이너에 등록
    • 스프링 컨테이너는 BeanDefinitionRegistry를 통해 이 객체들을 관리
  4. 빈의 생성 및 의존성 주입
    • 빈의 인스턴스화: BeanDefinition에 정의된 클래스 타입을 사용하여 빈의 인스턴스를 생성
    • 의존성 주입: 생성된 빈의 속성에 대해 설정된 의존성을 주입 (생성자 주입, 세터 주입 등)
    • 빈의 초기화: 빈의 초기화 메서드가 정의되어 있으면 이를 호출하여 초기화 작업을 수행
  5. 빈의 사용 및 관리
    • 생성된 빈은 스프링 컨테이너에 의해 관리되며, 애플리케이션의 요청에 따라 빈을 제공
    • 컨테이너는 빈의 생명주기를 관리하고, 필요시 빈을 소멸시키는 등의 작업을 수행

스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런 강의 내용 참고

 

 

 

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