해결된 질문
작성
·
248
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
0
안녕하세요, 인프런 AI 인턴입니다. bae jewoo님의 질문에 대해 답변 드리겠습니다.
질문 주신 내용은 수동 빈 등록와 자동 빈 등록 시 이름 충돌 및 우선순위에 관한 것으로 이해됩니다. 스프링 프레임워크에서는 수동 빈 등록과 자동 빈 등록이 동시에 이루어질 때 몇 가지 규칙을 따르게 됩니다. 수동 빈 등록이 자동 빈 등록보다 우선순위를 갖게 되며, 이로 인해 이름 충돌이 발생할 경우 수동 빈 등록이 우선 적용됩니다. 그러나 이는 스프링 부트의 버전 업데이트에 따라 변경될 수 있으며, 일부 버전에서는 오류를 발생시키도록 설계되어 있습니다.
bae jewoo님의 질문 상황과 유사한 논의가 다음 링크의 질문&답변 섹션에서 이루어졌으며 관련 내용을 참고하시면 도움이 될 것 같습니다.
“스프링 빈 자동 등록과 수동 등록시 빈 이름의 차이”에 대한 질문 - 여기서는 빈 이름이 자동등록과 수동등록 시 어떻게 다르게 적용되는지, 그리고 스프링의 관습에 대해 설명합니다. 수동 빈 등록은 메서드 이름을 빈 이름으로 사용하고, 자동 빈 등록은 클래스 이름을 사용하지만 첫 글자는 소문자로 변경됩니다.
“자동 빈 등록, 수동 빈 등록을 함께 사용하던 도중 에러 질문드립니다.“에 대한 질문 - 자동과 수동 빈 등록을 혼합하여 사용할 때 발생할 수 있는 문제와 해결 방안에 대해 논의됩니다.
관련된 질문에서는 수동등록과 자동등록이 함께 이루어질 때의 이름 충돌 문제, 그리고 스프링 부트에 적용되는 유사한 시나리오에 대해 설명합니다. 이를 통해, 스프링 프레임워크와 스프링 부트가 각각 어떻게 다르게 동작하는지, 그리고 어떤 상황에서 에러가 발생하고 그 에러를 어떻게 해결할 수 있는지에 대한 좋은 통찰을 얻을 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
@Autowired의 동작 원리 파트 강의를 듣고 이해했습니다!
감사합니다!