인프런 커뮤니티 질문&답변

bae jewoo님의 프로필 이미지
bae jewoo

작성한 질문수

스프링 핵심 원리 - 기본편

중복 등록과 충돌

수동 빈 등록 VS 자동 빈 등록

해결된 질문

작성

·

241

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
수동 빈 등록 VS 자동 빈 등록을 테스트 하던 과정 속에
의문점이 생겨서 질문 드립니다!


AutoAppConfig를 설정 정보로
스프링 컨테이너에 넘기면
1. @CompoentScan으로 @Compoent가 붙은
스프링 빈들이 컨테이너에 등록 생성자 주입을 하고 있으니
DI가 필요한 클래스들은 스프링 빈 등록과 동시에 DI
이때 MemoryMemberRepository는
memoryMemberRepository라는 이름으로 빈 등록

2. AutoAppConfig에서 팩토리 메서드 방식으로
수동 스프링 빈 등록 과정 진행
이때 이름을 memberRepository2 , memberRepository
memoryMemberRepository
이렇게 3번 메서드 이름을 바꿔서 진행했습니다.

처음 memberRepository2로 실행했을 때는
expected single matching bean but found 2: memoryMemberRepository, memberRepository2
이런 에러가 발생했습니다.

memberRepository와 memoryMemberRepository는
에러 발생 x 수동 설정에서 생성한 객체가 사용된다는
우선순위 테스트까지 완료
memoryMemberRepository는 오버라이딩 된 상태
memberRepository는 2개의 MemoryMemberRepository의 인스턴스가 있는 상태

테스트 결과에 생기는 의문점은 자동 빈 등록 vs 자동 빈 등록에서는 이름이 같으면 에러가 발생하는데
메서드 이름을 동일하게 하면 오버라이딩 된 상태로 스프링 빈에 등록 메서드 이름을 아예 다르게 하면 에러 발생
이름을 부모 타입으로 캐멀 케이스를 지켜서 이름을 하면
각각 다른 이름으로 같은 타입의 스프링 빈 생성
왜 이런 결과가 나오는 걸까요?
전부 오버라이딩 설정은 false로 진행했습니다.

답변 2

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. bae jewoo님

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

실제 동작하는 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

 

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

 

추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명

 

링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

bae jewoo님의 프로필 이미지
bae jewoo
질문자

@Autowired의 동작 원리 파트 강의를 듣고 이해했습니다!
감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. bae jewoo님의 질문에 대해 답변 드리겠습니다.

질문 주신 내용은 수동 빈 등록와 자동 빈 등록 시 이름 충돌 및 우선순위에 관한 것으로 이해됩니다. 스프링 프레임워크에서는 수동 빈 등록과 자동 빈 등록이 동시에 이루어질 때 몇 가지 규칙을 따르게 됩니다. 수동 빈 등록이 자동 빈 등록보다 우선순위를 갖게 되며, 이로 인해 이름 충돌이 발생할 경우 수동 빈 등록이 우선 적용됩니다. 그러나 이는 스프링 부트의 버전 업데이트에 따라 변경될 수 있으며, 일부 버전에서는 오류를 발생시키도록 설계되어 있습니다.

bae jewoo님의 질문 상황과 유사한 논의가 다음 링크의 질문&답변 섹션에서 이루어졌으며 관련 내용을 참고하시면 도움이 될 것 같습니다.

관련된 질문에서는 수동등록과 자동등록이 함께 이루어질 때의 이름 충돌 문제, 그리고 스프링 부트에 적용되는 유사한 시나리오에 대해 설명합니다. 이를 통해, 스프링 프레임워크와 스프링 부트가 각각 어떻게 다르게 동작하는지, 그리고 어떤 상황에서 에러가 발생하고 그 에러를 어떻게 해결할 수 있는지에 대한 좋은 통찰을 얻을 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

bae jewoo님의 프로필 이미지
bae jewoo

작성한 질문수

질문하기