인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

이건형님의 프로필 이미지
이건형

작성한 질문수

스프링 핵심 원리 - 기본편

조회한 빈이 모두 필요할 때, List, Map

DisCountService에서의 policyMap 빈 객체 가져오기 ?

작성

·

239

2

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
안녕하세요 '조회한 빈이 모두 필요할 때, List, Map 강의에서 질문이 있어서 글을 남깁니다
스프링 컨테이너에 DiscountService를 빈으로 등록하고, 생성자 의존관계 주입을 통하여 주입한 Map과 List는 밑의 테스트 케이스에서getBean으로 가져오려면 어떻게 해야 할까요 ??
 
public class AllBeanTest {

    @Test
    void findAllBean(){
        ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class);
        DiscountService discountService = ac.getBean(DiscountService.class);
        Map bean = ac.getBean(Map.class);
        System.out.println("bean.get(\"policyMap\") = " + bean.get("policyMap"));

        Member member = new Member(1L, "userA", Grade.VIP);
        int discountPrice = discountService.discount(member, 10000, "fixDiscountPolicy");
    }

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

        @Autowired
        public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policyList) {
            this.policyMap = policyMap;
            this.policyList = policyList;
            System.out.println("policyMap = " + policyMap);
            System.out.println("policyList = " + policyList);
        }

        public int discount(Member member, int price, String discountCode) {

            DiscountPolicy discountPolicy = policyMap.get(discountCode);
            return discountPolicy.discount(member, price);
        }
    }
}
 

답변 1

1

안녕하세요. 이건형님, 공식 서포터즈 David입니다.

getBean() 대신 getBeansOfType()을 사용해주세요.

getBeansOfType(DiscountPolicy.class)로 호출하시면 해당 타입을 가지는 빈을 모아둔 Map이 반환됩니다.

감사합니다.

이건형님의 프로필 이미지
이건형

작성한 질문수

질문하기