Bean의 중복

namkun·2022년 3월 12일
0

Spring

목록 보기
9/18

해당 내용은 '스프링 입문을 위한 자바 객체 지향의 원리와 이해'와 인프런 김영한님의 '스프링 핵심 원리 - 기본편' 강의를 참고하였습니다.


Bean이 만약 같은 이름으로 등록되는 경우가 있다면 어떻게 되는 걸까?

ComponentScan으로 자동 등록된 2개의 Bean이 충돌

여러 사람들이 같이 이용하는 코드에서 동일한 이름으로 Component를 등록한다면 어떻게 될까?

그러면 ConflictingBeanDefinitionException 이 터진다. 펑-

수동으로 등록한 Bean과 자동으로 등록된 Bean의 충돌

예를 들어보자.

만약 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 이렇게 세팅을 바꾸라는 식으로.

profile
개발하는 중국학과 사람

0개의 댓글