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

허진호님의 프로필 이미지
허진호

작성한 질문수

실전! 스프링 데이터 JPA

순수 JPA 기반 리포지토리 만들기

@PersistenceContext 질문

작성

·

496

0

안녕하세요 jpa api 강의와 이번 강의를 들으면서 repository에서 EntityManager를 정의하는 방식이 달라서 이 두 방식의 차이점이 궁금해서 질문드립니다.

항상 친절한 답변 감사합니다!

@RequiredArgsConstructor
public class ItemRepository {

private final EntityManager em;

@PersistenceContext
private EntityManager em;

답변 1

4

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

안녕하세요 허진호님^^

첫번째 방식은 생성자 주입이고

두번째 방식은 필드 주입입니다.

둘의 결과는 같습니다^^

생성자 주입에 대해서 조금 더 보충설명을 드리자면

롬복이 @RequiredArgsConstructor를 하면 final 필드를 기반으로 생성자를 만들어줍니다. 다음과 같은 생성자가 생깁니다.

public ItemRepository(EntityManager em) {

  this.em = em;

}

여기에 생성자가 하나면 스프링이 이 생성자에 자동으로 주입을 해줍니다^^

생성자 주입과 필드 주입의 장단점에 대해서는 생성자 주입 vs 필드 주입으로 구글에 검색해보시면 정말 많은 자료가 정리되어 있습니다.

참고로 스프링에서도 생성자 주입을 권장합니다^^!

https://www.google.com/search?q=%EC%83%9D%EC%84%B1%EC%9E%90+%EC%A3%BC%EC%9E%85+vs+%ED%95%84%EB%93%9C+%EC%A3%BC%EC%9E%85&oq=%EC%83%9D%EC%84%B1%EC%9E%90+%EC%A3%BC%EC%9E%85+vs+%ED%95%84%EB%93%9C+%EC%A3%BC%EC%9E%85&aqs=chrome..69i57.4067j1j7&sourceid=chrome&ie=UTF-8

허진호님의 프로필 이미지
허진호

작성한 질문수

질문하기