* 조회한 빈이 모두 필요할 때, List, Map
의도적으로 해당 타입의 스프링 빈이 모두 필요할 때가 있다.
ex. 할인 서비스를 제공하는데, 클라이언트가 할인 종류(rate, fix)를 선택할 수 있다 가정.
public class AllBeanTest {
@Test
void findAllBean() {
ApplicationContext ac = newAnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class);
DiscountService discountService = ac.getBean(DiscountService.class);
Member member = new Member(1L, "userA", Grade.VIP);
int discountPrice = discountService.discount(member, 10000,"fixDiscountPolicy");
assertThat(discountService).isInstanceOf(DiscountService.class);
assertThat(discountPrice).isEqualTo(1000);
}
static class DiscountService {
private final Map<String, DiscountPolicy> policyMap;
private final List<DiscountPolicy> policies;
public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) {
this.policyMap = policyMap;
this.policies = policies;
System.out.println("policyMap = " + policyMap);
System.out.println("policies = " + policies);
}
public int discount(Member member, int price, String discountCode) {
DiscountPolicy discountPolicy = policyMap.get(discountCode);
System.out.println("discountCode = " + discountCode);
System.out.println("discountPolicy = " + discountPolicy);
return discountPolicy.discount(member, price);
}
}
}
DiscountService는 map으로 모든 DiscountPolicy를 주입받는다(fixDiscountPolicy, rateDiscountPolicy 주입)
discount 메소드는 String인 discountCode로 get함수를 활용해서 map에서 꺼냄.(PDF참고하는 거 추천)
* 자동 수동의 올바른 실무 운영 기준
결론을 말하자면, 점점 자동을 선호하는 추세이다.
스프링은 @Component 뿐만 아니라 @Controller, @Service, @Repository처럼 일반적인 애플리케이션 로직을
자동으로 스캔할 수 있도록 지원하고 있다.
거기에 더해 스프링 부트는 최근에 Component Scan을 기본으로 사용하고 다양한 스프링 빈들도 조건이 맞으면 자동으로 등록하고 있다.
개발자 입장에서 스프링 빈을 하나 등록할 때 @Component만 넣어주면 끝나는 일을
@Configuartion들어가서 @Bean 적고 객체 생성하고 주입할 대상 일일이 적어주고 하는건 귀찮다.
애플리케이션은 크게 업무 로직과 기술 지원 로직으로 나눌 수 있다.
*업무 로직 빈 : 웹을 지원하는 컨트롤러, 핵심 비즈니스 로직이 있는 서비스, 데이터 계층의 로직을 처리하는 리포지토리등이 모두 업무 로직이다. 보통 비즈니스 요구사항을 개발할 때 추가되거나 변경된다.
업무 로직은 숫자도 매우 많고, 한 번 개발해야하면 컨트롤러, 서비스, 리포지토리처럼 유사한 패턴이 있으니 자동 기능을 사용하는 것이 유리하다.
*기술 지원 빈 : 기술적인 문제나 공통 관심사(AOP)를 처리할 때 주로 사용된다. 데이터베이스 연결이나, 공통 로그 처리 처럼 업무 로직을 지원하기 위한 하부 기술이나 공통 기술들이다.
기술 지원은 수가 매우 적고 애플리케이션 전반에 광범위하게 미친다. 그리고 기술지원 로직은 적용이 잘 되고 있는지 파악이 어려운 경우가 많아 수동으로 빈 등록을 해주는 것이 좋다.
'스프링 강의 필기 > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
강의 수강 후 전반적인 정리 - 1편 (0) | 2022.08.06 |
---|---|
섹션 7 -(1) 의존관계 자동 주입 (0) | 2022.07.13 |
섹션 6. 컴포넌트 스캔 (0) | 2022.07.13 |
섹션 5 - 싱글톤 컨테이너 (0) | 2022.07.09 |
섹션4 - 스프링 컨테이너와 스프링 빈 (0) | 2022.07.09 |