인프런 커뮤니티 질문&답변

bobsini601님의 프로필 이미지
bobsini601

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

상품 리포지토리 개발

MemberRepository 와 ItemRepository에서의 em 차이점

해결된 질문

작성

·

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에 올려둔것 같긴한데 맞을까요?

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. Sian Lee님

다음을 검색해보시면 답을 찾으실 수 있을거에요.

LocalContainerEntityManagerFactoryBean

감샇바니다.

bobsini601님의 프로필 이미지
bobsini601

작성한 질문수

질문하기