추천 되는 Injection

DeadWhale·2022년 11월 27일
0

Spring

목록 보기
25/25
post-thumbnail

field - injection

@Autowired
MemberRepository memberRepository = new MemberRepository();
  • 필드에 객체를 생성 하며 의존성을 주입하는 방식
  • DI 컨테이너가 필수적으로 사용되어야 한다.
  • 테스트가 불편하다

Setter - injection

private final MemberRepository memberRepository;

@Autowired
public void setMemberRepository(MemberRepository memberRepository) {
    this.memberRepository = memberRepository;
}
  • Setter 기반 주입
  • 단점으로는 런타임 시 재 호출 될 수도 있어서 문제가 될 수도 있다.
  • 목 삽입 등 테스트 환경 만들기가 간단하다.

constructor - injection

private final MemberRepository memberRepository;

@Autowired
public MemberService(MemberRepository memberRepository) {
    this.memberRepository = memberRepository;
}
  • 객체가 생성되면서 자동적으로 주입된다
  • 기본 생성자로 세팅되면서 조립됨으로 변경의 가능성이 없다
  • 동일하게 테스트 환경 만들기가 쉽다.
  • 영한님이 가장 추천한 방식 ( 인텔리제이도 권고한다 )
  • 객체를 final로 다룰수도 있어 편하다

@RequiredArgsConstructor

  • Lombok의 기능
  • final 키워드가 붙은 필드만 자동으로 생성자를 구현해 준다.
  • 생성자를 생략해도 되 매우 편하다

스프링부트의 경우

  • @PersistenceContext@Autowired 대체 가능하다
  • 편하게 @RequiredArgsConstructor 를 사용가능
  • EntityManager는 원래는 불가능하다

0개의 댓글