해결된 질문
작성
·
187
1
김영한 강사님 안녕하세요. 좋은 강의 항상 잘 보고있습니다! ㅎㅎ
다름이 아니라 강의를 쭉 듣던 중 궁금증이 생겼습니다.
MemberRepository에서 em은 @PersistenceContext를 붙였는데
ItemRepository에서는 @PersistenceContext를 붙이지 않고 그냥 final 처리만 되어있습니다.
제가 보기엔 둘다 같은 역할을 하는 em인것 같은데 소스코드에서는 왜 다르게 구현하신건지 궁금합니다!
답변 1
1
안녕하세요. bobsini601님^^
EntityManager를 주입 받으려면, @PersistenceContext로 주입을 받으면 됩니다.
그런데 스프링에서는 @Autowired나, 생성자 주입을 통해서도 EntityManager를 주입을 받을 수 있습니다.
private final EntityManager em; 부분은 위에 보시면 @RequiredArgsConstructor이 붙어 있는데요.
이 롬복 애노테이션이 있으면 final 부분을 가지고 생성자를 자동으로 만들어줍니다.
스프링은 생성자가 하나만 있으면 의존관계를 자동으로 주입해줍니다.
결과적으로 @PersistenceContext를 사용하는 코드와 생성자 주입을 사용하는 코드는 모두 EntityManager를 의존관계 주입받는 같은 코드입니다.
스프링의 생성자 주입에 대한 자세한 내용은 다음 강의를 참고해주세요.
감사합니다.
EntityManager를 주입한다는 것은 Spring Context에 EntityManager가 Bean으로 등록이 되어있다는건데 혹시 어디서 등록을 한건지 알 수 있을까요?
추측으로는 스프링 데이터 JPA 라이브러리가 EntityManager를 미리 Bean에 올려둔것 같긴한데 맞을까요?