[SpringBoot] Repository와 EntityManager 의존성 주입
2023. 5. 2. 14:04
반응형
Repository
Repository는 데이터베이스와의 상호 작용을 담당
Repository는 데이터베이스에 액세스하기 위한 메서드를 정의하고, 데이터를 검색, 저장, 업데이트 및 삭제하는데 사용
@Repository
@RequiredArgsConstructor
public class MemberRepository {
private final EntityManager em;
public void save(Member member){
em.persist(member);
}
}
- @Repository 어노테이션은 Spring에서 Repository 계층의 빈으로 등록하기 위해 사용
- EntityManager는 JPA에서 데이터베이스와 상호작용을 위해 사용되는 인터페이스. EntityManager는 영속성 컨텍스트를 통해서 데이터베이스와 상호작용하며, JPA의 통신 기능을 추상화한 것.
- EntityManager를 주입받아 JPA를 사용하여 데이터베이스와 상호작용할 수 있게 된다.
Repository의 EntityManager 의존성 주입
1. @PersistenceContext 사용
@Repository
public class MemberRepository {
@PersistenceContext
private EntityManager em;
public void save(Member member){
em.persist(member);
}
}
- @PersistenceContext는 EntityManager 인터페이스를 구현한 클래스의 인스턴스를 주입하는 데 사용
2. @Autowired 어노테이션으로 주입
@Repository
public class MemberRepository {
@Autowired
private EntityManager em;
public void save(Member member){
em.persist(member);
}
}
- 이제 JPA에서 @PersistenceContext 대신 @Autowired를 사용하는 것을 지원한다.
3. 생성자 주입
@Repository
public class MemberRepository {
private final EntityManager em;
//@Autowired
public MemberRepository(EntityManager em){
this.em = em;
}
public void save(Member member){
em.persist(member);
}
}
- 생성자를 통해 의존성 주입을 한다.
- 생성자가 하나이고, 이미 스프링 빈에 등록이 되었으므로 @Autowired를 생략할 수 있다.
- final 키워드를 사용하여 필드를 선언하면 해당 필드가 변경되지 않음을 보장할 수 있기 때문에, Thread-safe하지 않은 경우에도, 해당 필드가 불변이기 때문에 다른 스레드에서 의도치 않은 변경이 일어나는 것을 방지할 수 있음
4. @RequiredArgsConstructor
@Repository
@RequiredArgsConstructor
public class MemberRepository {
private final EntityManager em;
public void save(Member member){
em.persist(member);
}
}
- Lombok 어노테이션으로, final 필드만을 매개변수로 받는 생성자를 자동으로 생성
- 해당 클래스에서 사용하는 의존성을 자동으로 주입받을 수 있도록 해줌
해당 포스팅은 본 강의 수강을 따라가면서 작성합니다.
반응형
'Backend > Spring' 카테고리의 다른 글
[Spring Boot/JPA] 영속성 컨텍스트와 준영속 컨텍스트 (0) | 2023.05.09 |
---|---|
[SpringBoot] Repository/Service/Controller 계층 개발 (0) | 2023.05.09 |
[SpringBoot] Entity 클래스 개발하기 (0) | 2023.04.06 |
[SpringBoot] H2 데이터베이스 연동해보기 (0) | 2023.03.30 |
[SpringBoot] 프로젝트 환경설정 및 구조 알아보기 (0) | 2023.03.30 |