생성자 호출 시점에 딱 1번만 호출
final 키워드를 사용하기 때문에 컴파일 시점에 오류를 잡아줄 수 있음
자바빈 프로퍼티 규약의 수정자 메서드 방식
수정자를 public으로 열어뒀기 때문에 다른 누군가가 수정할 위험이 있음
코드가 간결함
하지만 DI프레임워크가 없으면 아무것도 알 수 없다는 문제가 있음
일반 메서드를 이용해 주입
잘 사용하지 않음
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;
@Autowired
public void init(MemberRepository memberRepository, DiscountPolicy
discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
생성자, 수정자, toString()등 반복적인 코드를 줄여주는 라이브러리
@RequiredArgsConstructor를 이용하면 필수 값을 매개변수로 갖는 생성자를 만들어줌
결과적으로 필드 주입만큼 간단한 코드로 생성자 주입을 구현할 수 있음
@Autowired는 타입으로 조회하기 때문에 하위 타입이 2개 이상일 경우 에러가 발생
- @Autowired 필드명 매칭
DiscountPolicy의 하위 객체가 2개 일때(RateDiscountPolicy, FixDiscountPolicy)
스프링은 규칙에 따라 두개의 빈 이름을 첫 글자만 소문자로 바꾸어 지정하기 때문에 다음과 같이 선언하면 중복을 피할 수 있음
@Autowired
private DiscountPolicy discountPolicy
- @Qualifier
@Qulifier끼리 매칭을 함으로 중복을 피할 수 있음
- @Primary
@Primary가 붙은 빈이 우선순위를 가지게 됨
- @Qualifier가@Primary보다 더 높은 우선순위를 가진다