개발/JPA

JPA 생성자 DI 리팩토링

nix-be 2021. 2. 16. 18:49
728x90

1. 생성자 DI 소스 코드를 간결하게 하는 방법

@Service

pubice class MemberService {

   @Autowired

   private MemberRepository memberRepository;

}

1번째 수정 ↓

@Service

public class MemberService {

  private MemberRepository memberRepository;

 

  @Autowired  <- 생략 가능 (생성자가 하나면, @Autowired를 생략할 수 있다.)
  public MemberService(MemberRepository memberRepository) {
     this.memberRepository = memberRepository;
  }
}

2번째 수정 

@Service

@RequiredArgsConstructor  <- final 있는 곳에만 생성자 생성

public class MemberService {

  private final MemberRepository memberRepository;

  생성자 생략

}

 

 


2. EntityManager 부분 간결하게 하는 방법

@Repository

public class MemberRepository {
  @PersistenceContext
  EntityManager em;

}

수정

@Repository
@RequiredArgsConstructor  <- final 있는 곳에만 생성자 생성
public class MemberRepository {
  private final EntityManager em;

  생성자 생략

}

 

 

 

1) final 키워드를 추가하면 컴파일 시점에 memberRepository 를 설정하지 않는 오류를 체크

2) @RequiredArgsConstructor : @AllArgsConstructor 같은 의미 생성자 자동생성 , final 있는 곳에만 생성자 생성

3) @Transactional : 트랜잭션, 영속성 컨텍스트 (데이터 변경하는 모든 곳에 필요 예) 저장 , 읽기)
readOnly=true : 데이터의 변경이 없는 읽기 전용 메서드에 사용, 영속성 컨텍스트를 플러시 하지 않으므로 약간의 성능 향상(읽기 전용에는 다 적용, 읽기 전용 모드 같은 느낌)
데이터베이스 드라이버가 지원하면 DB에서 성능 향상

4) @Autowired
생성자 Injection 많이 사용, 생성자가 하나면 생략 가능

 

728x90