본문 바로가기

JAVA

[SPRING] DI시 중복 Bean을 다 사용 하고 싶을 때 해결 방법

할인 서비스가 있을때, 클라이언트가 할인의 종류(fix, rate)를 선택할 수 있는 전략 패턴이 있습니다.

 

Map<String, Type> 으로 모든 Bean을 가져와 map.get으로 해당 Bean을 조회해 사용 합니다.

 

public class AllBeanTest {

    @Test
    void findAllBean() {
        ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class);

        DiscountService discountService = ac.getBean(DiscountService.class);

        Member member = new Member(1L, "park", Grade.VIP);
        int price = discountService.discount(member, 1000, "fixDiscountPolicy");
        Assertions.assertThat(discountService).isInstanceOf(DiscountService.class);
        Assertions.assertThat(price).isEqualTo(1000);


        int ratePrice = discountService.discount(member, 20000, "rateDiscountPolicy");
        Assertions.assertThat(discountService).isInstanceOf(DiscountService.class);
        Assertions.assertThat(ratePrice).isEqualTo(2000);
    }

    static class DiscountService {
        private final Map<String, DiscountPolicy> policyMap;
        private final List<DiscountPolicy> policies;

        @Autowired
        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);

            return discountPolicy.discount(member, price);

        }
    }
}

 

 

 

 

'JAVA' 카테고리의 다른 글

[SPRING] 쓰레드 풀 적정 숫자  (0) 2023.06.22
[SPRING] Bean 스코프란  (0) 2023.06.20
[SPRING] DI시 중복 Bean 오류 해결 방법  (0) 2023.06.19
[SPRING] 의존관계 주입 DI  (0) 2023.06.19
싱글톤 패턴  (0) 2023.06.17