섹션 5 : 스프링 컨테이너와 스프링 빈

Applicationcontext = 스프링 컨테이너
new AnnotationConfigApplicationContext(AppConfig.class);
ApplicationContext 인터페이스의 구현체로, 스프링 컨테이너의 역할을 한다.
스프링 컨테이너를 구성할 때는 구성 정보를 지정해주어야 한다.
위의 코드에서는 AppConfig.class를 구성정보로 지정하였다.
스프링 빈 등록
- @Bean 어노테이션이 붙은 메서드가 스프링 컨테이너에 의해 호출된다.
- 각 메서드는 객체를 생성하고 반환하며, 이때 반환된 객체가 스프링 컨테이너에 등록됩니다.
- 등록된 객체를 스프링 빈이라고 합니다.

빈 이름 | 빈 객체 |
memberService | MemberServiceImpl |
orderService | OrderServiceImpl |
memberRepository | MemoryMemberRepository |
discountPolicy | RateDiscountPolicy |
스프링 빈

스프링에 등록된 모든 Bean 정보를 출력하면 내가 등록한 빈과 스프링 내부에서 사용된 빈이 전부 보이게 된다.

스프링 내부에서 사용하는 빈은 getRole()로 구분할 수 있다.
if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION)
// ROLE_APPLICATION : 일반적으로 사용자가 정의한 빈
// ROLE_INFRASTRUCTURE : 사용자가 내부에서 사용하는 빈
스프링 빈 조회
- 부모 타입으로 조회하면, 자식 타입도 함께 조회
- 모든 자바 객체의 최고 부모인 Object 타입으로 조회하면, 모든 스프링 빈을 조회
Bean Factory |
⬆️
Application Context |
⬆️
AnnotationConfig ApplicationContext |
BeanFactory
- 스프링 컨테이너의 최상위 인터페이스
- 스프링 빈을 관리하고 조회하는 역할을 담당하고, getBean()을 제공
Applicationcontext
- BeanFactory 기능을 모두 상속받아서 제공
- 빈 관리기능 + 편리한 부가 기능을 제공한다
더보기
Applicationcontext가 제공하는 부가기능
- 메시지소스를 활용한 국제화 기능 (한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력)
- 환경변수 (로컬, 개발, 운영 등을 구분해서 처리)
- 애플리케이션 이벤트 (이벤트를 발행하고 구독하는 모델을 편리하게 지원)
- 편리한 리소스 조회 (파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회)
스프링 빈 설정 메타 정보 - BeanDefinition (인터페이스)
- 역할과 구현을 개념적으로 나눈 것
- 스프링에서의 @Bean, XML 에서의 <bean> 당 각각 하나씩 메타정보를 생성
- 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성
'Spring Study' 카테고리의 다른 글
[스프링 핵심 원리] - 기본편 #6 (0) | 2025.04.02 |
---|---|
[스프링 핵심 원리] - 기본편 #5 (1) | 2025.03.21 |
[스프링 핵심 원리] - 기본편 #3 (0) | 2025.03.11 |
[스프링 핵심 원리] - 기본편 #2 (0) | 2025.03.09 |
[스프링 핵심 원리] - 기본편 #1 (1) | 2025.03.02 |