다양한 의존성 주입 방법
종속성 주입에는 생성자 주입, 수정자 주입, 필드 주입 및 일반 메서드 주입의 네 가지 주요 방법이 있습니다.
가장 추천하는 기법인 생성자 주입을 코드로 살펴보자!
@Component
public class OrderServiceImpl implements OrderService {
private final MemberRespository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRespository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
생성자가 1개인 경우 @Autowired를 생략해도 자동으로 삽입된다.
마지막 키워드
생성자 주입을 사용할 때 필드에 final 키워드를 사용할 수 있습니다. 생성자에 값이 설정되지 않은 오류가 발생하면 컴파일 타임에 오류를 감지할 수 있습니다.
@Autowired
public OrderServiceImpl(MemberRespository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
// 위의 코드와 다른 부분은 같고, discountPolicy에 값을 설정하는 코드가 누락됨!
// 오류발생 java: variable discountPolicy might not have been initialized
}
생성자를 사용하여 최종 멤버 변수 초기화
final로 표시된 변수는 상수이므로 일반적으로 동시에 선언되고 초기화됩니다. 인스턴스 변수는 생성자에서 초기화할 수 있습니다. 클래스에 매개변수가 있는 생성자를 선언하면 인스턴스 생성 시 생성자의 매개변수로 final을 사용하여 멤버 변수를 초기화하는 데 필요한 값을 제공합니다. – Java 346p의 고전 –
Lombok을 사용한 기본 코드 감소
Lombok 라이브러리에서 제공하는 @RequiredArgsConstructor 함수를 사용하면 후행 필드를 수집하여 생성자를 자동으로 생성합니다.
@Autowired를 생략하고 Lombok의 자동 생성자 생성 기능을 사용한 결과 코드는 다음과 같다.
@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
}