Q) 컴포넌트 스캔에서 같은 빈 이름을 등록하면 어떻게 될까?
- 자동 빈 등록 vs 자동 빈 등록
- 수동 빈 등록 vs 자동 빈 등록
1. 자동 빈 등록 vs 자동 빈 등록
- 컴포넌트 스캔에 의해 자동으로 스프링 빈이등록되는데 그 이름이 같은 경우 스프링은 오류를 발생시킨다.
- ConflictingBeanDefinitionException 예외 발생
2. 수동 빈 등록 vs 자동 빈 등록
예제 코드
@Component
public class MemoryMemberRepository implements MemberRepository{...}
@Configuration
@ComponentScan
public class AutoAppConfig {
@Bean(name = "memoryMemberRepository")
MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
- 이 경우 수동 빈 등록이 우선권을 가진다.
(수동 빈이 자동 빈을 Overriding 해버린다.)
- 하지만 이런 경우 잡기 어려운 버그들이 만들어져서 스프링 부트에서는 수동 빈 등록과 자동 빈 등록이 충돌나면 오류가 발생하도록 기본 값을 바꿨다.
수동 빈 등록, 자동 빈 등록 오류시 스프링 부트 에러
Consider renaming one of beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true