Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- AOP
- 인프런
- JDBC
- 김영한
- 자바
- 알고리즘
- Android
- transaction
- 스프링 핵심 기능
- java
- 스프링 핵심 원리
- kotlin
- 백준
- 스프링
- Greedy
- Exception
- pointcut
- Proxy
- JPQL
- http
- Thymeleaf
- Servlet
- jpa
- springdatajpa
- Spring Boot
- 그리디
- QueryDSL
- spring
- db
- SpringBoot
Archives
- Today
- Total
개발자되기 프로젝트
컴포넌트 스캔, 중복 등록, 충돌 본문
- 컴포넌트 스캔을 통해 같은 빈 이름을 등록하면?????
- 자동 빈 등록 vs 자동 빈 등록
- 수동 빈 등록 vs 자동 빈 등록
1. 자동 빈 등록 vs 자동 빈 등록
- 컴포넌트 스캔을 통해 이미 등록되었는데, 또! 등록되면???
- ConflictingBeanDefinitionException 발생
2. 수동 빈 등록 vs 자동 빈 등록
- 현재 MemoryMemberRepository가 @Component를 통해 빈으로 등록된다.
--> 빈 이름은 memoryMemberRepository
- AutoAppConfig에 동일 이름을 가지는 빈을 추가하도록 설정하자.
@Configuration @ComponentScan( //스캔에서 제외할 것 -->@ComponentScan도 @Component임, AppConfig나 TestConfig제외하기 위해. excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class), basePackages = "hello.core" ) public class AutoAppConfig { @Bean(name = "memoryMemberRepository") MemberRepository memberRepository(){ return new MemoryMemberRepository(); } }
- 어찌될깡
- 수동 등록 빈이 우선권을 가진다!!
- 빈 이름이 memoryMemberRepository인 빈은 내가 수동으로 등록한 빈이다.
- 수동 빈이 자동 빈을 오버라이딩 해벌임
Overriding bean definition for bean 'memoryMemberRepository' with a different definition : replacing [Generic bean: class [hello.core.member.MemoryMemberRepository]
- 의도한거면 괜찮은데....대부분 설정이 꼬여서 이런 결과가 생긴다고 한다..
- 굉장히.. 잡기 어려운 버그다..............애매한...버그....
- 그래서 스프링 부트에서는 수동 vs 자동 상황이면 오류 발생하도록 바뀜!
*************************** APPLICATION FAILED TO START *************************** Description: The bean 'memoryMemberRepository', defined in class path resource [hello/core/AutoAppConfig.class], could not be registered. A bean with that name has already been defined in file [C:\\hello\core\member\MemoryMemberRepository.class] and overriding is disabled. Action: Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
'인프런 > [인프런] Spring 핵심원리 이해' 카테고리의 다른 글
@Autowired 옵션처리 (0) | 2021.07.29 |
---|---|
의존관계 주입 방법 (0) | 2021.07.29 |
컴포넌트 스캔, 필터 (0) | 2021.07.28 |
Component Scan의 탐색 위치와 스캔 대상 (0) | 2021.07.28 |
Component 스캔, @Autowired (0) | 2021.07.28 |
Comments