FireDrago
[Spring] 의존성 자동주입 본문
의존성 자동주입
의존성은 한 클래스에서 다른 클래스를 사용하는 것을 말한다.
스프링은 의존성을 자동으로 주입할 수 있다. 스프링은 스프링 빈의 형태로 미리 객체를 생성하고 그때 그때 필요한 의존성을 주입한다. 그 방법은 크게 3가지가 있다.
| 필드 주입 | - 테스트 코드 작성 외에는 사용하지 말자! |
| 수정자 주입 (setter) | - 의존성 주입 이후에도 외부에서 의존성 변경 가능성 있음, - 의존성이 가변적이고, 필수가 아닐때만 사용하자 |
| 생성자 주입 | - 생성자 주입을 사용하자 - 순수 자바코드로 테스트 할 수 있고, 불변선언 (final)이 가능하며, 컴파일 단계에서 오류를 잡아준다 |


자동주입시 빈이 2개 이상일때
@Autowired 애너테이션을 사용하면, 타입으로 빈을 검색하여 주입한다. 그런데 상속과 같이 같은 타입의 빈이 2개이상
존재하면, 어떻게 빈을 주입할까?
<@Qualifier 사용>


- 빈을 설정할때 이름과 함께 @Qualifier 애너테이션을 사용한다. 빈을 주입할때는 파라미터에 @Qualifier("이름") 을 붙여
빈을 선택하여 주입한다.
<@Primay 사용>

- @Primary 애너테이션은 빈 설정시에만 붙여주면 된다. @Primary 붙은 빈은 우선적으로 주입된다.
<우선순위>
- @Primary 와 @Qualifier 이 중복선언된 경우 @Qualifier 애너테이션이 우선순위를 가진다.
기본적으로 @Primary 애너테이션을 사용하고, 보조적인 빈이 필요할경우 @Qualifier 애너테이션을 사용하자
조회한 빈이 모두 필요할 때 Map, List

- DiscountService는 Map으로 모든 DiscountPolicy 를 주입받는다. fixDiscountPolicy, rateDiscountPolicy 가 주입된다.
- discount () 메서드는 discountCode로 "fixDiscountPolicy"가 넘어오면 map에서
- fixDiscountPolicy 스프링 빈을 찾아서 실행한다. 물론 “rateDiscountPolicy”가 넘어오면
- rateDiscountPolicy 스프링 빈을 찾아서 실행한다.
이 글은 김영한님의 스프링 핵심 원리 - 기본편을 바탕으로 작성되었습니다.
'프로그래밍 > Spring' 카테고리의 다른 글
| [Spring] Spring MVC 기본구조 (0) | 2024.01.26 |
|---|---|
| [Spring] 빈 생명주기 콜백 (0) | 2024.01.11 |
| [Spring] 스프링 컨테이너와 싱글턴 (0) | 2024.01.06 |
| [Spring] 스프링 컨테이너와 스프링 빈 (0) | 2024.01.05 |
| [Spring] 스프링 기본 원리 (0) | 2024.01.04 |
