작성
·
1.2K
1
안녕하세요! 강의를 다시 돌려보고 있는 중입니다. 김영한님 다른 강의들 듣고 2회독으로 처음부터 다시 듣고 있는데, 1회독 때랑은 이해도가 확실히 다른거 같네요.
밑에 질문에도 저랑 비슷한 문제가 있었는데, Qualifier를 써야 해결된다는 질문이 있더라고요. 영한님 답변 보니까 Bean 등록이 2개여서 하나를 지워줘야 한다고 하더라고요. 저도 에러메세지를 보니 bean이 2개 등록되어 있다고 하고요. SpringConfig 파일에는 분명 bean 태그가 하나만 작성되어 있어서 혼동이 왔었습니다,,, (MemberService에만 @Bean태그가 있었습니다. SpringConfig파일은 pdf와 동일했습니다.) 에러메세지를 다시 보니 JdbcMemberRepository가 SpringDataJpaMemberRepository가 중복이 된다고 하더라고요
----------------------------
Could not autowire. There is more than one bean of 'MemberRepository' type.
Beans:
jdbcMemberRepository (JdbcMemberRepository.java) springDataJpaMemberRepository (SpringDataJpaMemberRepository.java)
----------------------------------------
JdbcMemberRepository를 보니 @Repository 어노테이션이 남아있었습니다. 현재 SpringDataJpaMemberRepository를 사용하므로 JdbcMemberRepository에 있는 @Repository를 지웠고, 결과적으로 해결됐습니다.
여기서 질문은 @Repository에 자체적으로 @Bean태그가 포함되어 있는 것인지 궁굼합니다. 아니면 JpaRepository인터페이스 내에 자체적으로 @Repository가 있고, JdbcMemberRepository에 있던 @Repository와 충돌이 일어난 것일까요?
제가 @Repository 어노테이션에서 세부로 들어가면서 확인을 해봤는데 @Bean태그를 못 찾아서 질문드립니다...
답변 1
2
안녕하세요. 태형님
@Repository 내부에 @Component라는 애노테이션이 포함되어 있습니다. 그래서 컴포넌트 스캔에 의해서 스프링 빈으로 자동 등록됩니다.
관련해서 다음 강의인 스프링 핵심 원리 강의에서 더 자세히 설명드립니다^^
감사합니다.