- spring 강의
- 이론 정리 복습
[add] 중복 등록과 충돌 [#28] #31
컴포넌트 스캔에서 같은 빈 이름을 등록하면 어떻게 될까? 아래 두가지 상황이 있다.
1. 자동 빈 등록 vs 자동 빈 등록
2. 수동 빈 등록 vs 자동 빈 등록
자동 빈 등록 vs 자동 빈 등록
컴포넌트 스캔에 의해 자동으로 스프링 빈이 등록되는데, 그 이름이 같은 경우 스프링은 오류를 발생시킨다.
ConflictingBeanDefinitionException 예외 발생
service라는 이름 추가
service를 붙인 후에 AutoAppConfigTest를 실행시키면 충돌이 난다.
수동 빈 등록 vs 자동 빈 등록
MemoryMemberRepository를 보면 Component가 등록되어있다.
💡Component 이기 때문에
MemoryMemberRepository에서 M이 소문자 m으로 바뀌어서
memoryMemberRepository가 된다.
이것을 이름을 똑같이 해서 AutoAppConfig에 등록하는 것이다.
⬇️
public class AutoAppConfig {
// 중복 등록과 충돌
@Bean(name = "memoryMemberRepository")
MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
이름을 memoryMemberRepository라고 작성한 이유는 바로 위 💡 표시 확인
이제 AutoAppConfigTest를 실행해본다. 결과는 성공한다.
같은 이름인데 성공한 이유는 ?
이 경우 수동 빈 등록이 우선권을 가진다.
(수동 빈이 자동 빈을 오버라이딩 해버린다.)
수동 빈 등록시 남는 로그
수동 빈 등록, 자동 빈 등록 오류시 스프링 부트 에러
스프링 부트인 CoreApplication 을 실행해보면 오류를 볼 수 있다.
최근 스프링 부트에서는 수동 빈 등록과 자동 빈 등록이 충돌나면 오류가 발생하도록 기본 값을 바꾸었다.
* 기본값이 false
만약에 오버라이딩 하고 싶으면 application.properties에
spring.main.allow-bean-definition-overriding=true
코드를 추가한다.
'TIL' 카테고리의 다른 글
211일차(모험 120일차) - 코드 살펴보기 (0) | 2022.04.13 |
---|---|
210일차(모험 119일차) - 프로젝트 오류 해결하기 (0) | 2022.04.12 |
206일차(모험 115일차) (0) | 2022.04.08 |
205일차(모험 114일차) - 프로젝트 (0) | 2022.04.07 |
204일차(모험 113일차) - 프로젝트 (0) | 2022.04.06 |