반응형
# 스프링 핵심 원리 기본편
# 중복 등록과 충돌
컴포넌트 스캔에서 같은 빈 이름이 등록된 경우 관련...
아래와 같이 두 가지 상황 존재
자동 빈 등록 vs 자동 빈 등록
수동 빈 등록 vs 자동 빈 등록
## 자동 빈 등록 vs 자동 빈 등록
- 컴포넌트 스캔에 의해 자동으로 스프링 빈 등록, 그 이름이 같을 경우 스프링은 오류를 발생시킨다.
ConflictingBeanDefinitionException 예외 발생
## 수동 빈 등록 vs 자동 빈 등록
- AutoAppConfig
@Configuration
@ComponentScan(
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig {
@Bean(name = "memoryMemberRepository")
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
- 위의 경우 수동 빈 등록이 우선권을 갖는다. (수동 빈이 자동 빈을 오버라이딩 해버린다.)
- 수동 빈 등록 시 남는 로그는 아래와 같다.
Overriding bean definition for bean 'memoryMemberRepository' with a different
definition: replacing
- 개발자가 의도적으로 설정해서 이런 결과가 만들어 질 수도 있지만... 현실에서는 개발자가 의도적으로 설정해서 이런 결과가 만들어지기 보다는 다양한 설정 들이 꼬여 의도하지 않은 결과가 만들어지는 경우가 대부분 이라고 한다.
- 그래서 최근 스프링 부트는 수동 빈 등록과 자동 빈 등록이 충돌이 생길경우 오류가 발생하도록 기본 값을 바꾸었다.
- 수동 빈 등록, 자동 빈 등록 오류 시 스프링 부트 에러는 아래와 같다.
Consider renaming one of the beans or enabling overriding by setting
spring.main.allow-bean-definition-overriding=true
- 개발은 명확한게 아니라면 하지 말아야 한다. 혼자 일하는게 아니라, 협업하기 때문에 어떤 일이 생길지 모른다.
출처 : 인프런 스프링 핵심 원리 기본편
반응형
'인프런 강의 학습 > 스프링 핵심 원리(기본편)' 카테고리의 다른 글
스프링 핵심 원리 기본편 16일차 (0) | 2021.02.12 |
---|---|
스프링 핵심 원리 기본편 15일차 (0) | 2021.02.09 |
스프링 핵심 원리 기본편 13일차 (0) | 2021.02.06 |
스프링 핵심 원리 기본편 12일차 (0) | 2021.02.05 |
스프링 핵심 원리 기본편 11일차 (0) | 2021.02.04 |