본문 바로가기
Spring Study/Spring 기본

[Spring 기본] 스프링 컨테이너/스프링 빈 (Spring Container/Bean)

by 정재인 2023. 8. 2.

<들어가기 전>

스프링 컨테이너: 스프링 컨테이너는 스프링 빈의 생명 주기를 관리하며, 생성된 스프링 빈들에게 추가적인 기능을 제공하는 역할을 한다. IoCDI의 원리가 스프링 컨테이너에 적용된다.

개발자는 new 연산자, 인터페이스 호출, 팩토리 호출 방식으로 객체를 생성하고 소멸하지만, 스프링 컨테이너를 사용하면 해당 역할을 대신해 준다.

즉, 제어 흐름을 외부에서 관리하고, 객체들 간의 의존 관계를 스프링 컨테이너가 런타임 과정에서 알아서 만들어 준다.

 

스프링 빈: 스프링 컨테이너에 의해 관리되는 자바 객체(POJO)를 의미한다.


 

스프링 컨테이너
XML 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있음
ex) ApplicationContext, BeanFactory

 

스프링 컨테이너 생성 및 빈 등록 과정

- 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈으로 등록

- 빈 이름은 메서드 이름 사용

- 빈 이름을 직접 부여 가능

※ 주의: 빈 이름은 항상 다른 이름 부여

 

- 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입(DI)


스프링 빈 조회 방법

- ac.getBeanDefinitionNames(): 스프링에 등록된 모든 빈 이름 조회
- ac.getBean("빈 이름", 타입): 빈 이름으로 빈 객체(인스턴스) 조회
- ac.getBean(타입)
- ac.getBeansOfType(): 해당 타입의 모든 빈 조회

 

BeanFactory / ApplicationContext

BeanFactory와 ApplicationContext 관계

 

BeanFactory ApplicaionContext
● 스프링 컨테이너의 최상위 인터페이스 BeanFactory 기능을 모두 상속받아 제공
● 스프링 빈을 관리 및 조회 ● 빈을 관리 및 검색 이외의 수 많은 부가기능 수행
getBean() 제공  
● 대부분의 기능  

 

ApplicationContext가 제공하는 부가기능

- 메시지소스를 활용한 국제화 기능: 한국에서 들어오면 한국어 / 영어권에서 들어오면 영어 출력
- 환경변수: 로컬, 개발, 운영등을 구분해서 처리
- 애플리케이션 이벤트
- 편리한 리소스 조회

 

정리

- ApplicationContext는 BeanFactory의 기능 상속
- ApplicationContext는 빈 관리기능 + 편리한 부가 기능 제공
- BeanFactory를 직접 사용할 일 거의 X, 대부분 ApplicationContext 사용

스프링 빈 설정 메타 정보 - BeanDefinition

- BeanDefinition을 빈 설정 메타 정보라고 함: @Bean, <bean>당 각각 하나씩 메타 정보 생성
- 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈 생성
- BeanDefinition을 직접 정의하거나 사용할 일은 거의 X 

댓글