스프링 빈 기본 조회
스프링 컨테이너에 실제 스프링 빈이 잘 등록되었는지 확인해보자.
public class ApplicationContextInfoTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("모든 빈 출력하기")
void findAllBean() {
// 스프링에 등록된 모든 빈 이름을 조회한다.
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
for (String beanDefinition : beanDefinitionNames) {
// 빈 이름으로 빈 객체(인스턴스)를 조회한다.
Object bean = ac.getBean(beanDefinition);
System.out.println("beanDefinition = " + beanDefinition + ", object = " + bean);
}
}
}
스프링 컨테이너에 있는 모든 빈 정보가 출력되었다.

스프링 내부에서 쓰는 빈은 제외하고 내가 직접 등록한 빈만 출력할 수도 있다.
스프링 컨테이너에서 스프링 빈을 찾는 가장 기본적인 조회 방법은 위와 같다. 조회 대상 스프링 빈이 없으면 NoSuchBeanDefinitoinException: No bean named '***' available 예외가 발생한다.
빈 이름으로 조회

memberService빈을 불러와 MemberServiceImpl의 인스턴스라는 것을 확인했다.
이름 없이 타입으로 조회
구체 타입으로 조회
memberService가 AppConfig에서 MemberService를 반환한다고 메서드가 정의되어 있어도, 실제로는 MemberServiceImpl라는 인스턴스 타입을 보고 결정하기 때문에 구체 클래스로도 조회할 수 있다.
하지만 이 방법은 좋지 않다. 역할과 구현을 구분하고 역할에 의존해야 하기 때문이다.
존재하지 않는 빈 조회
Last updated
Was this helpful?