문자는 컴파일 시점에 체크가 안됨. ( 컴파일은 되는데 런타임오류 )
이렇게 해두면 @MainDiscountPolicy 하면 위에 있는 어노테이션 기능들이 다 동작함 스프링 컨테이너 안에서
( @Qualifier 줄 빼고 다
여기서 가져옴. )
우리가 만든걸 쓰자.
쓰는 곳에서도 그냥 @MainDiscountPolicy 붙이면 됨.
@Primary 로 해결이 되면 걍 그걸 써라.
------------------------------------------------------------------- 7-8. 조회한 빈이 모두 필요할 때, List, Map
이렇게 해두면
AutoAppConfig 에서 컴포넌트 스캔을 해서 FixDiscountPolicy, RateDiscountPolicy 를 띄움.
-> 내가 지금 DiscountService 생성자 주입을 하고 있으니까 @Component 달린 필요한, 방금 올린 DiscountPolicy 타입의 FixDiscountPolicy, RateDiscountPolicy 을 주입받음. ( @Autowired )
맵, 리스트 둘 다 받음 ( 리스트는 value만 출력됨. )
맵은 key = value
----------------------------------------
추가로 TDD로 만들어보자.
고객이 있을 때 10000원을 결제 했을 때 고정할인으로 하겠다는 상황 가정 후 테스트케이스 작성 -> 이후 진짜코드작성
첫 assert : discountService 변수에 DiscountService 객체가 잘 들어왔나 검사
두번째 assert : 구한 discountPrice 가 ( 방금 만든 discount 메서드 ) 1000원이 맞는지 검사
결론 : Map이용하면 편리하게 동적으로 다형성을 헤치지 않고 모든 빈을 사용가능
------------------------------------- 7-9. 자동, 수동의 올바른 실무 운영 기준
점점 자동으로 가는 추세
스프링부트는 자동을 깔고있다
Config 파일은 프로젝트 루트에 놓으라고함. -> 컴포넌트 스캔 위해서 ( 전에 배움 ) -> 이 파일을 읽으면서 전체적인 흐름을 파악할 수 있다.
DiscountPolicy를 눌러서 각각 들어가서 Fix, Rate이 있는걸 파악하는 것보다 이런 Config 파일에 모아두는게 파악하기 훨씬 유리하다. (특히 여러명이 개발할 때 )
ㅋㅋㅋㅋ추상화가 남이 한거보면 난해함. 물론 내가 할땐 좋음.
자동으로하고싶으면 패키지에라도 모아놔라
스프링과 스프링부트가 자동등록하는 빈들은 그냥 쓰자. 이유가 다 있다.
# 정리
수동 - 자바코드(@Configuration, @Bean) , xml
자동 - @ComponentScan
수동 - 자바코드(@Configuration, @Bean) , xml
자동 - @ComponentScan
수동 - 자바코드(@Configuration, @Bean) , xml
자동 - @ComponentScan
'Java, Spring > 스프링 핵심 원리 기본' 카테고리의 다른 글
8-2. ~ 8-4. 생명주기 콜백 3가지 방법 (0) | 2022.08.08 |
---|---|
8-1. 빈 생명주기 콜백 시작 (0) | 2022.08.08 |
7-5. 조회 빈이 2개 이상 - 문제 ~ 7-6 @Autowired필드명, @Qualifier, @Primary (0) | 2022.08.07 |
7-3. 생성자 주입을 선택해라! ~ 7-4. Lombok (0) | 2022.08.07 |
7-1. 다양한 의존관계 주입 방법 ~ 7-2 (0) | 2022.08.07 |