안녕하세요 오늘 강의를 정리해 보겠습니다.
스프링 빈을 조회할 때 타입으로 조회 시 같은 타입의 스프링빈이 둘 이상이면 오류가 발생합니다.
이럴 때는 빈 이름을 지정해 주면 됩니다.
getBeansOfType() 사용 시 해당 타입의 모든 빈을 조회할 수 있습니다.
소스로 보여드리겠습니다.
일반 먼저 저희가 계속 사용할 Appconfig 파일을 수정하면서 테스트를 하는 건 별로 좋은 방향이 아니기 때문에 class안에 static class로 임시 config class를 만들어 주겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@Configuration
static class SameBeanConfig{ // AppConfig를 수정하지 않기 위해 요기서만 쓰기 위해 만듬
@Bean
public MemberRepository memberRepository1() {
return new MemoryMemberRepository();
}
@Bean
public MemberRepository memberRepository2() {
return new MemoryMemberRepository();
}
}
|
cs |
그다음에 ac.getBean(MemberRepository.class);로 조회 시 에러가 발생할 거입니다. 이유는 타입으로 조회하였는데 임시 config를 보면 동일 타입이 2개 있기 때문입니다.
코드를 돌려보면 "NoUniqueBeanDefinitionException"에러가 발생합니다.
해결을 위해서는 ac.getBean(MemberRepository.class)로 타입으로만 조회하지 말고 빈 이름을 지정해 주면 됩니다.
ac.getBean("memberRepository2",MemberRepository.class) 이렇게 해주면 중복 에러가 발생하지 않습니다.
또 특정 타입을 모두 조회하기 위해서는 ac.getBeansOfType(MemberRepository.class);를 사용해 주면 되고 해당 결과를 Map에 넣어 for문을 돌려 확인이 가능합니다.
다음에는 상속 관계에 대한 공부를 해보겠습니다.
감사합니다.
'TIL > 스프링 핵심원리 - 기본편 with 인프런(김영한님)' 카테고리의 다른 글
스프링 핵심원리 기본편10 - BeanFactory와 ApplicationContext & 자바 코드, XML (0) | 2024.07.30 |
---|---|
스프링 핵심원리 기본편9 - 스프링 빈 조회(상속관계) (0) | 2024.07.16 |
스프링 핵심원리 기본편7 - 스프링 빈 조회(기본) (0) | 2024.07.08 |
스프링 핵심원리 기본편6 - 스프링 컨테이너 생성 & 컨테이너에 등록된 모든 빈 조회 (0) | 2024.07.02 |
스프링 핵심원리 기본편5 - 스프링으로 전환하기 (0) | 2024.07.01 |