작성
·
206
답변 2
3
AppConfig
@Configuration
public class AppConfig {
@Bean
public MemberRepository memberRepository() {
System.out.println("call AppConfig.memberRepository");
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService() {
System.out.println("AppConfig.orderService");
return new OrderServiceImpl(memberRepository(),discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
return new RateDiscountPolicy();
}
public MemberService memberService() {
System.out.println("call AppConfig.memberService");
return new MemberServiceImpl(memberRepository());
}
}
SameBeanConfig
@Configuration
static class SameBeanConfig {
@Bean
public MemberRepository memberRepository1() {
return new MemoryMemberRepository();
}
@Bean
public MemberRepository memberRepository2() {
return new MemoryMemberRepository();
}
}
ApplicationContextSameBeanFindTest에 작성된 테스트 중 하나만 가져와서 예상해보죠. 나머지는 전지윤님이 직접 확인해보시는걸 권장합니다.
@Test
@DisplayName("타입으로 조회시 같은 타입이 둘 이상 있으면, 중복 오류가 밥생한다")
void findBeanByTypeDuplicate() {
assertThrows(NoUniqueBeanDefinitionException.class,
() -> ac.getBean(MemberRepository.class));
}
SameBeanConfig에서는 동일한 타입의 서로 다른 이름의 빈이 등록되어 있습니다. AppConfig는 말씀하신대로 중복된 타입의 빈이 등록되어 있지 않지만, 테스트에서 예외를 던진다고 작성하였다고 하므로 실패하는 테스트가 됩니다.
감사합니다.
0
안녕하세요. 전지윤님, 공식 서포터즈 OMG입니다.
강의에서 사용한 코드를 볼까요?
public class ApplicationContextSameBeanFindTest {
AnnotationConfigApplicationContext ac = new
AnnotationConfigApplicationContext(SameBeanConfig.class);
@Configuration
static class SameBeanConfig {
@Bean
public MemberRepository memberRepository1() {
return new MemoryMemberRepository();
}
@Bean
public MemberRepository memberRepository2() {
return new MemoryMemberRepository();
}
}
}
빈 설정 관련 파일(클래스)을 ApplicationContextSameBeanFindTest.class 안에서 만든 SameBeanConfig.class를 사용하고 있기 때문에 두 군데에서 Bean을 등록하더라도 상관없습니다.
.
가령 프로젝트가 커질 경우, 설정 파일을 목적 별로 분리하여 사용하는 경우도 있습니다.
WebConfig 관련 설정 클래스, Security 설정 관련 클래스 등을 분리해서 사용하기도 합니다.
.
제 답변을 보시고 난 후
AnnotationConfigApplicationContext ac = new
AnnotationConfigApplicationContext(SameBeanConfig.class);
SameBeanConfig대신 AppConfig로 바꿔서 실행시켜보세요.
실행 전, 어떤 상황이 발생할지 예상해보세요. (테스트가 통과 할지, 실패한다면 어떤 이유로 실패 할지)
이해가 조금 더 되면서 깨닫는 무언가가 있을거라 생각합니다.
감사합니다.
안녕하세요 ^^ 방금 확인햇습니다 AppConfig 클래스에는 중복된 타입이 빈으로 등록되잇지 않으니 테스트가 정상 통과하려나요 ?^^.. 답변 감사합니다 바로확인해보겟습니다