해결된 질문
작성
·
32
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
@Import(JpaConfig.class)
@SpringBootApplication(scanBasePackages = "hello.itemservice.web")
public class ItemServiceApplication {
}
스캔 대상을 web 디렉터리로 한정했기 때문에
@Slf4j
@Repository
@Transactional
public class JpaItemRepository implements ItemRepository {
private final EntityManager em;
public JpaItemRepository(EntityManager em) {
this.em = em;
}
.
.
}
여기에 @Repository가 있다고 하더라도 자동으로 스캔되지 않고, 그래서 생성자에 em이 @Autowired로 주입되는 게 아니라
@Configuration
public class JpaConfig {
private final EntityManager em;
public JpaConfig(EntityManager em) {
this.em = em;
}
@Bean
public ItemService itemService() {
return new ItemServiceV1(itemRepository());
}
@Bean
public ItemRepository itemRepository() {
return new JpaItemRepository(em);
}
}
JpaConfig의 생성자에서 em을 @Autowired를 통해 자동으로 주입받은 다음, 그 em을 JpaItemRepository에 수동으로 주입했다
이렇게 이해하면 될까요?
답변 감사합니다!