minOS

컴포넌트 스캔(3) - 중복 등록과 충돌 본문

TIL/김영한의 스프링 핵심 원리

컴포넌트 스캔(3) - 중복 등록과 충돌

minOE 2024. 4. 6. 13:33
728x90

 

중복 등록

1. 자동 빈 등록 vs 자동 빈 등록

2. 수동 빈 등록 vs 자동 빈 등록

 

 

자동 빈 등록 vs 자동 빈 등록

컴포넌트 스캔에 의해 자동으로 같은 이름의 스프링 빈이 등록되면 스프링은 오류를 발생시킨다.

 

 

수동 빈 등록 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
728x90