inflearn logo
강의

Course

Instructor

Spring DB Part 2 - Data Access Utilization Technology

Introduction to Querydsl 1 - Problems with Existing Methods

의존성주입 대해 질문드립니다.

427

작성자 없음

0 asked

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
안녕하세요, 해당 수업과는 관계가 없는 내용이긴 한데..의존성 주입 관련해서 조금 헷갈리는 부분이 있어 질문드립니다.

 

먼저, ItemServiceApplication 클래스에서 보면 스캔 범위가 hello.itemservice.web 이하의 경로로 지정되어 있습니다.

아래는 SpringDataJpaConfig 클래스입니다.

SpringDataJpaItemRepository 를 주입받는 과정에서, 빨간 에러 표시가 뜨고 'Could not autowire. No beans of 'SpringDataJpaItemRepository' type found.' 라는 빈을 찾을 수 없다는 메시지가 표시됩니다. 어찌보면 당연한 것 같습니다. 해당 레포지토리가 속해있는 경로는 스캔 대상이 아니거든요.

 

게다가 SpringDataJpaItemRepository 에는 해당 인터페이스를 빈으로 등록할만한 요소를 가지고 있지는 않습니다. 따로 component 로 등록될만한 애노테이션이 붙은것도 아니고요. 그런데 생각해보면 JpaRepository 인터페이스를 상속받고 있어서, 해당 인터페이스에 스프링 빈으로 등록될만한 요인이 있다면 가능한 것일까 싶은 생각은 드는데..이 부분에 대한 확신이 들지 않아 질문드립니다.

 

실제로 ItemServiceApplication 에서 스캔 범위를 "hello.itemservice.web" -> "hello.itemservice" 으로 변경해보면 위에서 본 빨간 에러는 사라집니다.

그런데 만약 빨간 에러가 나오는게 맞는 상황이라면, 저희가 지금까지 작성한 로직들이 동작하지 않아야 할 것 같아서요.

특히 SpringDataJpaItemRepository 를 주입받는 ItemServiceV1 클래스에서 주입이 안되는게 맞지 않나 싶습니다.

 

물론 서비스는 추상화된 레포지토리의 의존하고 있긴 하지만, 의존성이 주입되는 시점에는 구체 클래스인 SpringDataJpaItemRepository 클래스가 주입될텐데 이게 정상적으로 동작하는게 이해가 조금 안됩니다.

 

글이 너무 길었는데..정리해서 말씀드리면

  1. SpringDataConfig.java 에서 SpringDataJpaItemRepository 를 주입받을 때 'Could not autowire. No beans of 'SpringDataJpaItemRepository' type found.' 라는 메시지가 IDE에 표시된다.

  2. 실제로 SpringDataJpaItemRepository 클래스는 컴포넌트 스캔 대상 범위에 속하지 않는다.

  3. 그런데도 애플리케이션 로직 및 테스트 로직이 정상적으로 수행된다.

  4. 해당 상황이 이해가 되지 않는다.

입니다.

spring mvc jpa querydsl spring-data-mybatis spring-jpa

Answer 1

0

johj0910

자체적으로 해결이 되어서 글을 삭제하려했는데 작성자만 사라져버렸네요;;

일단 수업을 더 듣다보니 선생님께서 스프링 Data 에서 관리하는 JpaRepository 를 상속받고 있어서 SpringDataJpaItemRepository 도 자동으로 빈으로 등록이 된다고 설명을 해주셨습니다. 그렇다면 단순히 IDE에서 인식하지 못하는 현상이라고 봐야될 것 같네요.

RepositoryTest의 패키지 위치가 domain인 이유

0

30

2

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

0

30

1

update()에 사용하는 setter 질문드립니다.

0

47

1

SQL 중심적 개발의 문제점에 대한 질문

0

72

1

혹시 Containing 을 안쓰신 이유가 있을까요?

0

83

2

[공유] 스프링부트 4.x 버전 mybatis 연동

0

174

1

@repository 어노테이션

0

89

3

ItemService

0

58

1

논리 커밋, 물리 커밋 질문드립니다.

0

54

1

내부 트랜잭션 커밋은 필수인가요?

0

57

1

프록시 커넥션 객체를 반환할 때 생성하는건가요?

0

54

1

Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)

2

178

2

JPQL 대신 네이티브 쿼리를 사용해야 하는 경우

0

77

1

@EventListener(ApplicationReadyEvent.class) 관련

0

88

1

트랜잭션 동기화 매니저와 데이터 소스

0

76

1

DB 관련 강의 개설 계획은 없으신건가요?

0

133

2

물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요

0

94

1

스프링 3 버전 이상 rollbackFor 변경된듯요

1

112

1

트랜잭션 전파 질문.

0

87

1

프로젝트 오픈 에러

0

126

1

외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다

0

83

2

같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환

0

72

1

h2 인메모리 테스트중 예약어 충돌날 경우 대처방법

0

102

1

커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문

0

98

2