컴포넌트 스캔에 의해 자동으로 같은 이름의 스프링 빈이 등록되면 스프링은 오류를 발생시킨다.
수동 빈 등록 vs 자동 빈 등록
@Configuration
@ComponentScan(
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig {
@Bean("memoryMemberRepository") // 수동빈
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
}
이 경우 수동 빈이 등록이 우선권을 가진다.
수동빈 등록 시 남는 로그
Overriding bean definition for bean 'memoryMemberRepository' with a different definition: replacing [Generic bean: class [com.example.core.member.MemoryMemberRepository]
수동 빈이 우선권을 갖는 것은 여러 개발자가 협업할때 어려운 버그를 생성할 수도 있음 그래서 최근 스프링 부트는 수동 빈 등록과 자동 빈 등록이 충돌나면 오류가 발생하도록 기본값을 바꾸었다.
이름이 같은 수동 빈, 자동 빈 등록 오류시 스프링 부트 에러
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true