강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

­이준호님의 프로필 이미지
­이준호

작성한 질문수

스프링 핵심 원리 - 기본편

옵션 처리

contextLoads에서 에러가 발생합니다

작성

·

583

0

AllTest를 실행시키면 contextLoads에서 다음과 같은 에러가 발생합니다

에러의 내용은 memoryMemberRepository와 getMemberRepository / rateDiscountPolicy와 getDiscountPolicy 의 빈 충돌입니다.

AutoConfig의 ComponentScan에 excludeFilters를 제대로 작성을 했습니다. 

MemoryMemberRepository 클래스와 RateDiscountPolicy 클래스에 @Primary 애너테이션을 붙여주면 AllTest가 모두 통과가 되는데 영한님께서는 @Primary를 붙이지 않고서도 통과가 됬는데 제건 어디서 꼬여버린걸까요...

소스코드가 필요하시다면 보내드리겠습니다.

 

추가 질문입니다.

1.  contextLoads 이외의 우리가 작성한 테스트 케이스에서는 스프링 컨테이너의 설정 정보를 AutoConfig, AppConfig 중 하나만 넘겨줬는데 이럴 경우(테스트를 실행한 경우) 스프링 컨테이너의 설정 정보로 등록되지 않은 클래스도 (excludeFilters 정의 안해준 default 상황일 경우) 스프링의 빈으로 등록이 되는건가요? 

퀴즈

필드 주입(Field Injection) 방식이 일반적으로 권장되지 않는 이유는 무엇일까요?

불변성을 보장하기 어려워서

의존성 변경이 쉬워서

순수 Java 코드로 테스트하기 어려워서

설정 코드 작성이 복잡해서

답변 2

0

­이준호님의 프로필 이미지
­이준호
질문자

감사합니다!

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요.

RateDiscountPolicy에 @Primary가 걸려있어야 합니다^^

여기에서 @MainDiscountPolicy 안에 @Primary가 되어 있는 것이지요.

@Component
@MainDiscountPolicy
public class RateDiscountPolicy implements DiscountPolicy {

추가로 질문하신 부분은 AutoConfig를 넘기게 되면 해당 설정과 그 안에 있는 빈들은 모두 적용됩니다.

간단히 빈들 등록하면서 테스트 해보시면 바로 이해가 되실거에요^^

감사합니다.

 

­이준호님의 프로필 이미지
­이준호

작성한 질문수

질문하기