컴포넌트 스캔에서 같은 빈 이름을 등록하면 어떻게 될까?
1. 자동 빈 등록 vs 자동 빈 등록 (둘다 컴포넌트 스캔)
2. 수동 빈 등록 vs 자동 빈 등록
자동 빈 등록 vs 자동 빈 등록
중복 등록되는 경우 스프링은 오류를 발생시킨다.
- ConflictingBeanDefinitionException
수동 빈 등록 vs 자동 빈 등록
위는 우리가 @Component 애노테이션을 붙혀 자동으로 빈 등록되는 클래스이다.
이와 똑같은 빈 이름(memoryMemberRepository)을 가진 빈을 수동으로 등록시켜보겠다.
실행시켜보니 충돌이 발생하지 않고 테스트가 성공한 것을 확인할 수 있다. 콘솔로그를 살펴보자.
다른 정의에 의해 오버라이딩되었다는 로그가 있다.
즉, 이러한 경우네는 수동 빈 등록이 우선권을 가져 자동 빈을 오버라이딩 하는 것이다.
개발자가 의도적으로 수동 빈을 등록하여 오버라이딩을 했다면 상관없지만,
대부분 현실은 개발자가 의도하지 않고 여러 설정들이 엉켜 이런 결과가 만들어진다.
그러면 정말 잡기 어려운 버그가 만들어진다. 항상 잡기 어려운 버그는 애매한 버그다.
그래서 최근 스프링 부트에서는 수동 빈 등록과 자동 빈 등록 충돌이 발생하면 오류가 발생하도록
기본 값을 바꾸었다.
그래서 스프링 부트인 "CoreApplication"을 실행시켜보면 아래와 같은 오류 발생
스프링은 가능하지만, 스프링 부트는 overriding값이 false로 되어있기 때문에 오류가 발생.
만약 의도하여 overriding하고 싶다면 application.properties에 들어가 아래 코드를 작성하여 수동으로 overriding을 true로 바꿔줘야한다.
명심할 것
개발은 나 혼자 하는 것이 아닌 여러명의 개발자가 함께 협업하는 것.
따라서 애매한 것, 명확하지 않은 것은 절대 사용하지 말기.
추후에 버그로 돌아올 가능성이 높음.
반응형
'Spring > Spring Core' 카테고리의 다른 글
옵션 처리 (0) | 2021.03.18 |
---|---|
다양한 의존관계 주입 방법 (0) | 2021.03.17 |
필터 (0) | 2021.03.15 |
탐색 위치와 기본 스캔 대상 (0) | 2021.03.13 |
컴포넌트 스캔과 의존관계 자동 주입 (0) | 2021.03.13 |