1. 생성자 주입
- final로 필드를 만들고, 생성자로 의존관계를 작성 => 작성할 코드가 많음
@Component
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
/*
비즈니스 로직
*/
}
2. 생성자가 1개니깐 @AutoWired생략 가능
@Component
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
/*
비즈니스 로직
*/
}
3. Lombok적용
- Lombok의 @RequiredArgsConstructor를 사용하면 final이 붙은 필드들에 대한 생성자 코드를 자동으로 생성함
- 생성자 코드를 작성할 필요 없음
- final키워드 필드 + @AutoWired +생성자 1개 => @RequiredArgsConstructor
@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
/*
비즈니스 로직
*/
}
@Component
@RequiredArgsConstructor
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository;
/*
비즈니스 로직
*/
}