해당 내용은 '스프링 입문을 위한 자바 객체 지향의 원리와 이해'와 인프런 김영한님의 '스프링 핵심 원리 - 기본편' 강의를 참고하였습니다.
Bean이 만약 같은 이름으로 등록되는 경우가 있다면 어떻게 되는 걸까?
여러 사람들이 같이 이용하는 코드에서 동일한 이름으로 Component를 등록한다면 어떻게 될까?
그러면 ConflictingBeanDefinitionException
이 터진다. 펑-
예를 들어보자.
만약 CarImpl
라는 클래스를 @Component
를 통해서 자동으로 Bean을 등록하게 했다.
근데 만약 그전에 Configuration 파일에 써놓은 @Bean(name = 'carImpl')
과 같은 Bean을 등록하는 코드를 지우지 않았고, 그 상태로 서비스를 실행하게 된다면 어떻게 될까?
예전에는 Overriding bean definition for bean ~~
이라는 메세지와 함께 수동으로 등록한 빈이 자동으로 등록한 빈을 오버라이딩 했다.
이런 경우에는 수동으로 등록하는 Bean이 자동으로 등록되는 Bean에 비해서 우선권을 갖는다고 할 수 있다.
그러나 최근에는 application 프로퍼티에서 굳이 옵션(spring.main.allow-bean-definition-overriding
)으로 true값을 주지 않는 이상은 기본 값으로 에러를 발생시킨다고 한다.
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
이렇게 세팅을 바꾸라는 식으로.