public class AllBeanTest {
@Test
void findAllBean() {
// ApplicationContext를 생성하고, AutoAppConfig와 DiscountService 클래스를 기반으로 Spring 컨테이너를 설정합니다.
ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class);
// 컨테이너에서 DiscountService 타입의 빈을 가져옵니다.
DiscountService discountService = ac.getBean(DiscountService.class);
// 새로운 Member 인스턴스를 생성합니다. ID는 1L, 이름은 "userA", 등급은 VIP입니다.
Member member = new Member(1L, "userA", Grade.VIP);
// discountService를 사용하여 할인 가격을 계산합니다. 원래 가격은 10000원, 할인 정책은 "fixDiscountPolicy"입니다.
int discountPrice = discountService.discount(member, 10000, "fixDiscountPolicy");
// discountService 객체가 DiscountService 클래스의 인스턴스인지 확인합니다.
assertThat(discountService).isInstanceOf(DiscountService.class);
// 계산된 할인 가격이 1000원과 일치하는지 확인합니다.
assertThat(discountPrice).isEqualTo(1000);
}
static class DiscountService {
// DiscountPolicy 타입의 객체를 문자열 키와 연결하여 저장하는 Map을 선언합니다.
private final Map<String, DiscountPolicy> policyMap;
// DiscountPolicy 객체의 리스트를 저장합니다.
private final List<DiscountPolicy> policies;
public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) {
// 생성자에서 policyMap과 policies를 초기화합니다.
this.policyMap = policyMap;
this.policies = policies;
// policyMap의 내용을 콘솔에 출력합니다.
System.out.println("policyMap = " + policyMap);
// policies 리스트의 내용을 콘솔에 출력합니다.
System.out.println("policies = " + policies);
}
public int discount(Member member, int price, String discountCode) {
// discountCode에 해당하는 DiscountPolicy 객체를 policyMap에서 찾습니다.
DiscountPolicy discountPolicy = policyMap.get(discountCode);
// 사용된 discountCode를 콘솔에 출력합니다.
System.out.println("discountCode = " + discountCode);
// 찾아진 discountPolicy 객체를 콘솔에 출력합니다.
System.out.println("discountPolicy = " + discountPolicy);
// discountPolicy를 사용하여 할인된 가격을 계산하고 반환합니다.
return discountPolicy.discount(member, price);
}
}
}
자동, 수동의 올바른 실무 운영 기준