ComponentScan - 중복 등록과 충돌

현시기얌·2022년 3월 4일
0

Spring 핵심원리

목록 보기
10/15

Q) 컴포넌트 스캔에서 같은 빈 이름을 등록하면 어떻게 될까?

  1. 자동 빈 등록 vs 자동 빈 등록
  2. 수동 빈 등록 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
profile
현시깁니다

0개의 댓글