해결된 질문
작성
·
193
0
답변 2
0
안녕하세요. Jin님, 공식 서포터즈 OMG입니다.
다음과 같이 스프링 빈을 자동 등록 어노테이션을 사용하였다면 해당 빈의 이름은 클래스 이름의 첫글자는 소문자를 따라갑니다.(memberServiceImpl
)
@Component
// 혹은 @Service
public class MemberServiceImpl implements MemberService
따라서 다음과 같이 스프링 빈의 이름으로 조회하면서 타입까지 일치해야 하는 아래의 DL에서는 빈을 찾을 수 없다는 오류가 발생합니다.
ac.getBean("memberService", MemberService.class);
반면, 다음과 같이 타입으로 조회하는 경우에는 이름이 일치하지 않더라도 타입으로 조회했기 때문에 테스트가 성공합니다.
MemberService memberService = ac.getBean(MemberService.class);
Assertions.assertThat(memberService).isInstanceOf(MemberService.class);
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. Jin님의 질문에 대해 도움이 될 만한 정보를 찾았습니다.
ac.getBean("memberService", MemberService.class)
와 ac.getBean(MemberService.class)
사이의 주요 차이는 Bean을 찾는 방식입니다. 첫 번째 방식은 특정 이름(“memberService”)을 가진 MemberService 타입의 Bean을 찾으며, 두 번째 방식은 MemberService 타입의 Bean을 찾습니다. 이름과 타입 모두를 지정해주는 경우와 달리, 타입만으로 Bean을 조회하는 경우는 다양한 설정이나 상황에서 더 유연하게 활용될 수 있습니다.
이러한 차이 때문에, 특정 Bean 이름으로 조회할 때 Bean을 찾을 수 없는 오류가 발생했을 수 있습니다. 이와 관련하여, getBean()의 파라미터 에 대해 자세히 설명한 게시물이 있습니다. 이 링크에서는 getBean() 함수 사용 방식의 차이점과 각 방식의 사용 사례에 대해 설명하고 있습니다.
또한, 이러한 문제가 발생하는 상황은 보통 Bean의 이름이 예상과 다르게 설정되었거나, AutoAppConfig 설정에서 Bean 이름을 따로 지정하지 않았을 때 벌어질 수 있습니다. 빈 이름을 명시하거나 명시하지 않고 타입만으로 조회하는 방식의 선택은 상황에 따라 달라질 수 있으며, 각 방식의 이해는 스프링 프레임워크 사용에 있어 중요한 부분입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.