스프링 컨테이너의 생성, 빈 등록과 조회까지 알아봤다.
이번 편에서는 빈 조회의 다양한 케이스, 스프링 컨테이너가 제공하는 추가 기능들, 그리고 그 핵심을 관통하는 BeanDefinition 메타정보에 대해 정리해본다.
요구사항
- 빈이 상속 관계일 때의 조회 방법을 알고 싶다.
- 스프링 컨테이너가 제공하는 다양한 기능을 활용하고 싶다.
- 설정 방식이 달라도 일관된 메커니즘으로 빈을 다루고 싶다.
문제점
- 부모 타입으로 조회할 경우 자식이 여러 개면 어떤 게 반환되는지 헷갈릴 수 있다.
- 단순한 빈 관리 외에도 다양한 부가기능을 어떻게 활용할지 모르겠다.
- 자바, XML 등 설정 방식이 다른데 스프링이 어떻게 하나로 관리할 수 있는지 이해가 안 된다.
개선 방향: 다양한 조회 방식과 BeanDefinition 이해하기
1. 부모 타입으로 빈 조회하기
- 부모 타입으로 조회하면 자식 클래스까지 모두 함께 조회된다.
- 같은 타입의 빈이 여러 개라면, @Qualifier나 빈 이름으로 명확히 지정해야 한다.
Map<String, DiscountPolicy> beansOfType = ac.getBeansOfType(DiscountPolicy.class);
2. 스프링 컨테이너의 다양한 기능들
ApplicationContext는 단순한 빈 관리 외에도 다음과 같은 다양한 기능을 제공한다.
기능 | 설명 |
MessageSource | 국제화 메시지 처리 |
Environment | 환경 설정, 프로파일 처리 |
ApplicationEventPublisher | 이벤트 발행 및 리스닝 |
ResourceLoader | 파일, 클래스패스 리소스 접근 |
이 기능들은 실무 개발에서 메시지 처리, 설정 관리, 이벤트 기반 처리 등에 자주 사용된다.
3. BeanFactory vs ApplicationContext
항목 | BeanFactory | ApplicationContext |
핵심 IoC 컨테이너 | O | O |
부가 기능 제공 | X | O |
실무 사용 빈도 | 거의 안 씀 | 대부분 사용 |
대부분의 경우 ApplicationContext만 사용해도 충분하다.
4. 다양한 설정 형식의 지원 원리
스프링은 자바 코드, XML 등 다양한 설정 형식을 모두 BeanDefinition이라는 구조로 통일해서 처리한다.
- 설정 형식은 다르지만, 결국 BeanDefinition으로 변환된다.
- 이 메타정보를 통해 빈 생성, 의존 관계 주입이 이루어진다.
BeanDefinition bd = ac.getBeanDefinition("memberService");
실무에서 직접 다룰 일은 드물지만, 오픈소스나 스프링 내부 코드를 볼 때 등장할 수 있다.
설계 원칙 정리
- 부모 타입 조회 시 자식 빈까지 모두 함께 조회된다.
- ApplicationContext는 단순 IoC를 넘어 다양한 기능을 함께 제공한다.
- 스프링은 BeanDefinition이라는 메타정보를 통해 설정 형식을 추상화한다.
- 실무에서는 ApplicationContext만으로 대부분의 기능을 커버할 수 있다.
'Spring' 카테고리의 다른 글
[Spring 완전 정복 시리즈] 14편 - @Configuration과 바이트코드 조작의 마법 (1) | 2025.07.28 |
---|---|
[Spring 완전 정복 시리즈] 13편 - 싱글톤 컨테이너의 원리와 설계 주의점 (1) | 2025.07.28 |
[Spring 완전 정복 시리즈] 11편 - 스프링 빈 조회와 ApplicationContext의 역할 (1) | 2025.07.27 |
[Spring 완전 정복 시리즈] 10편 - 스프링 컨테이너의 시작과 빈 등록 (1) | 2025.07.27 |
[Spring 완전 정복 시리즈] 9편 - 스프링으로 전환하고 의존관계 주입 자동화하기 (1) | 2025.07.26 |