녕의 학습 기록

[Spring 기본] 의존관계 자동 주입 (4) 본문

Dev/Spring

[Spring 기본] 의존관계 자동 주입 (4)

kjyyjk 2022. 11. 20. 23:18

 학습 내용 

조회되는 동일 타입의 빈 모두 필요 할 경우 / 자동 또는 수동 빈 운영 기준


* 조회 빈 모두 이용

 

스프링 컨테이너에 등록된 빈 중 동일 타입이 있을 경우 오류 발생.

 

전 학습에서 우선순위를 두거나 고르는 방식으로 하나를 골라 조회했었다.

 

이번에는 조회되는 빈 모두를 이용..!

 

List 와 Map 을 이용해본다

 

DiscountService에 Map과 List 필드로 선언

Map<>은 key 값으로 스프링 빈 이름이, value 값으로 DiscountPolicy 타입의 스프링 빈이 담아진다

(rateDiscountPolicy, fixDiscountPolicy 가 담아지겠지 ? )

 

생성자 의존관계 주입 이용( 생성자가 하나이므로 @Autowired 지워도 똑같다 )

 

DiscountService의 discount메서드

discountCode로 넘어오는 스프링 빈 이름으로 빈을 찾고,

해당 객체의 discount() 메서드를 이용해 할인금액 반환!!

 

 

 

다음의 경우

new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class);

파라미터 둘 다 스프링 빈으로 등록된다

 

 

결과로는 정상 실행된다

 

코드를 보면 구현에 의존하지 않고 역할에 의존하여 기존의 다형성을 지켜내고,

동적으로 빈을 가져다 사용할 수 있기 때문에 Good이다.

 

* 자동 빈? 수동 빈?

 

점점 자동을 선호하는 추세.

 

자동으로 할 시에 @Component 붙여주면 끝나지만 수동으로 하면 설정정보에 들어가서 @Bean, 의존관계 주입 등등

 

해야할 일이 많아짐.

 

지금이야 스프링 빈 등록을 몇개 안하고 있으니 그렇다고 하지만,

 

나중 가서 1000개, 1억개의 스프링 빈을 등록해야한다면? 골치 아플 듯 ㅋㅋ

 

그리고 자동으로 등록해도 객체 지향의 DIP와 OCP 유지된다.

 

수동 빈은 주로 기술 지원 로직에서!  수동 빈 등록 == 명확하게 드러낸다

 


 

 다음 학습 내용 

 

빈 생명주기 콜백

 

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com