스프링 컨테이너에 빈이 잘 등록되었는지 확인하고 싶다면? 바로 빈 조회 테스트를 통해 확인할 수 있다.
요구사항
- 등록된 빈 목록을 확인하고 싶다.
- 특정 빈을 이름 혹은 타입으로 가져오고 싶다.
- 스프링 내부에서 사용 중인 빈과 구분해서 보고 싶다.
빈 조회 예제
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("모든 빈 출력하기")
void findAllBean() {
String[] beanNames = ac.getBeanDefinitionNames();
for (String name : beanNames) {
Object bean = ac.getBean(name);
System.out.println("name = " + name + " / object = " + bean);
}
}
@Test
@DisplayName("애플리케이션 빈 출력하기")
void findApplicationBean() {
for (String name : ac.getBeanDefinitionNames()) {
BeanDefinition bd = ac.getBeanDefinition(name);
if (bd.getRole() == BeanDefinition.ROLE_APPLICATION) {
System.out.println("name = " + name + " / object = " + ac.getBean(name));
}
}
}
참고: 기본 빈 조회 방법
Object bean = applicationContext.getBean("빈이름");
Object bean = applicationContext.getBean(타입.class);
Object bean = applicationContext.getBean("빈이름", 타입.class);
- 구체 타입으로 조회할 수 있지만, 유연성이 떨어질 수 있으므로 인터페이스를 기준으로 조회하는 것이 바람직하다.
- 같은 타입의 빈이 여러 개일 경우 NoUniqueBeanDefinitionException 예외가 발생할 수 있다.
ApplicationContext vs BeanFactory
특징 |
BeanFactory | ApplicationContext |
기본 IoC 기능 | O | O |
부가 기능 (국제화, 이벤트, 메시지 처리 등) | X | O |
실제 현업에서 사용 여부 | 거의 안 씀 | 대부분 사용 |
설계 원칙 정리
- 빈은 이름, 타입, 혹은 둘 다를 이용해 조회 가능하다.
- ApplicationContext는 단순한 빈 관리 외에도 많은 부가 기능을 제공하므로 대부분 이걸 사용한다.
- 빈의 용도(Role)에 따라 애플리케이션 빈과 스프링 내부 빈으로 구분해볼 수 있다.
'Spring' 카테고리의 다른 글
[Spring 완전 정복 시리즈] 13편 - 싱글톤 컨테이너의 원리와 설계 주의점 (1) | 2025.07.28 |
---|---|
[Spring 완전 정복 시리즈] 12편 - 다양한 빈 조회와 스프링 컨테이너의 숨겨진 기능들 (2) | 2025.07.27 |
[Spring 완전 정복 시리즈] 10편 - 스프링 컨테이너의 시작과 빈 등록 (1) | 2025.07.27 |
[Spring 완전 정복 시리즈] 9편 - 스프링으로 전환하고 의존관계 주입 자동화하기 (1) | 2025.07.26 |
[Spring 완전 정복 시리즈] 8편 - AppConfig로 객체 지향 설계 완성하기 (0) | 2025.07.26 |