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