[add] 동일한 타입이 둘 이상 [#13] #17
중복을 만들기 위해서는 AppConfig에 손을 대야한다.
손을 대지 않고 Config 파일을 새로 만든다.
기존에는 아래코드를 사용했지만
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
⬇️ 이번 테스트에서는 Config 파일을 새로 만들 것이기 때문에 AppConfig 대신 새로운 Config 작성
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class);
Config 만들기
@Configuration
static class SameBeanConfig { }
static 쓰는 장점?
class 안에 class를 썼다라는 것은 static class SameBeanConfig { } 는
ApplicationContextSameBeanFindTest 안에서만 쓰겠다는 뜻이다.
* 참고) https://lu-delight.tistory.com/447
https://siyoon210.tistory.com/141 , https://johngrib.github.io/wiki/java-inner-class-may-be-static/
@Bean
public MemberRepository memberRepository1(){
return new MemoryMemberRepository();
}
@Bean
public MemberRepository memberRepository2(){
return new MemoryMemberRepository();
}
* bean의 이름이 다르고 인스턴스 타입이 같을 수 있다.
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class);
@Configuration
static class SameBeanConfig {
@Bean
public MemberRepository memberRepository1(){
return new MemoryMemberRepository();
}
@Bean
public MemberRepository memberRepository2(){
return new MemoryMemberRepository();
}
}
스프링 컨테이너가 뜰 때 SameBeanConfig만 가지고 실행한다.
여기에는 스프링 컨테이너가 스프링 bean 2가지만 등록을 한다.
memberRepository1, memberRepository2
실행하면 → NoUniqueBeanDefinitionException 에러 발생
Test가 성공시키도록 변경
public class ApplicationContextSameBeanFindTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class);
@Test
@DisplayName("타입으로 조회시 같은 타입이 둘 이상 있으면, 중복 오류가 발생한다.")
void findBeanByTypeDuplicate() {
MemberRepository bean = ac.getBean(MemberRepository.class));
}
@Configuration
static class SameBeanConfig {
// 생략
}
}
⬇️
@Test
@DisplayName("타입으로 조회시 같은 타입이 둘 이상 있으면, 중복 오류가 발생한다.")
void findBeanByTypeDuplicate() {
assertThrows(NoUniqueBeanDefinitionException.class,
() -> ac.getBean(MemberRepository.class));
}
* import static ~
빈 이름으로 지정
특정 타입 모두 조회
ac.getBeansOfType() 을 사용하면 해당 타입의 모든 빈을 조회할 수 있다
'TIL' 카테고리의 다른 글
184일차(모험 93일차) - 정리 + BeanFactory와 ApplicationContext (0) | 2022.03.17 |
---|---|
183일차(모험 92일차) - 스프링 빈 조회 - 상속 관계 (0) | 2022.03.16 |
181일차(모험 90일차) - 스프링 빈 조회 - 기본 (0) | 2022.03.14 |
178일차(모험 87일차) - 스프링 컨테이너 생성 (0) | 2022.03.11 |
177일차(모험 86일차) - error: invalid path (0) | 2022.03.10 |