• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

MemberRepository 와 ItemRepository에서의 em 차이점

21.05.09 13:09 작성 조회수 140

1

김영한 강사님 안녕하세요. 좋은 강의 항상 잘 보고있습니다! ㅎㅎ

다름이 아니라 강의를 쭉 듣던 중 궁금증이 생겼습니다. 

MemberRepository에서 em은 @PersistenceContext를 붙였는데

ItemRepository에서는 @PersistenceContext를 붙이지 않고 그냥 final 처리만 되어있습니다.

제가 보기엔 둘다 같은 역할을 하는 em인것 같은데 소스코드에서는 왜 다르게 구현하신건지 궁금합니다!

답변 1

답변을 작성해보세요.

1

안녕하세요. bobsini601님^^

EntityManager를 주입 받으려면, @PersistenceContext로 주입을 받으면 됩니다.

그런데 스프링에서는 @Autowired나, 생성자 주입을 통해서도 EntityManager를 주입을 받을 수 있습니다.

private final EntityManager em; 부분은 위에 보시면 @RequiredArgsConstructor이 붙어 있는데요.

이 롬복 애노테이션이 있으면 final 부분을 가지고 생성자를 자동으로 만들어줍니다.

스프링은 생성자가 하나만 있으면 의존관계를 자동으로 주입해줍니다.

결과적으로 @PersistenceContext를 사용하는 코드와 생성자 주입을 사용하는 코드는 모두 EntityManager를 의존관계 주입받는 같은 코드입니다.

스프링의 생성자 주입에 대한 자세한 내용은 다음 강의를 참고해주세요.

스프링 핵심 원리 - 기본편

감사합니다.

Sian Lee님의 프로필

Sian Lee

2022.05.04

EntityManager를 주입한다는 것은 Spring Context에 EntityManager가 Bean으로 등록이 되어있다는건데 혹시 어디서 등록을 한건지 알 수 있을까요? 

추측으로는 스프링 데이터 JPA 라이브러리가 EntityManager를 미리 Bean에 올려둔것 같긴한데 맞을까요?

안녕하세요. Sian Lee님

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

LocalContainerEntityManagerFactoryBean

감샇바니다.