의존관계 자동 주입

바그다드·2023년 3월 1일
0

의존관계 자동 주입 4가지 방법

1. 생성자 주입

생성자 호출 시점에 딱 1번만 호출
final 키워드를 사용하기 때문에 컴파일 시점에 오류를 잡아줄 수 있음

2. 수정자 주입(setter)

자바빈 프로퍼티 규약의 수정자 메서드 방식
수정자를 public으로 열어뒀기 때문에 다른 누군가가 수정할 위험이 있음

3. 필드 주입

코드가 간결함
하지만 DI프레임워크가 없으면 아무것도 알 수 없다는 문제가 있음

4. 메서드 주입

일반 메서드를 이용해 주입
잘 사용하지 않음
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;

@Autowired
public void init(MemberRepository memberRepository, DiscountPolicy
discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}

롬복(lombok)

생성자, 수정자, toString()등 반복적인 코드를 줄여주는 라이브러리

롬복을 이용한 생성자 주입

@RequiredArgsConstructor를 이용하면 필수 값을 매개변수로 갖는 생성자를 만들어줌
결과적으로 필드 주입만큼 간단한 코드로 생성자 주입을 구현할 수 있음

조회한 빈이 2개 이상일 때

@Autowired는 타입으로 조회하기 때문에 하위 타입이 2개 이상일 경우 에러가 발생
  1. @Autowired 필드명 매칭
    DiscountPolicy의 하위 객체가 2개 일때(RateDiscountPolicy, FixDiscountPolicy)
    스프링은 규칙에 따라 두개의 빈 이름을 첫 글자만 소문자로 바꾸어 지정하기 때문에 다음과 같이 선언하면 중복을 피할 수 있음
@Autowired
private DiscountPolicy discountPolicy
  1. @Qualifier
    @Qulifier끼리 매칭을 함으로 중복을 피할 수 있음

  1. @Primary
    @Primary가 붙은 빈이 우선순위를 가지게 됨

  • @Qualifier가@Primary보다 더 높은 우선순위를 가진다
profile
꾸준히 하자!

0개의 댓글