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

김지수님의 프로필 이미지
김지수

작성한 질문수

스프링 핵심 원리 - 기본편

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

조회한 빈이 모두 필요할때 강의 5분 32초

작성

·

771

0

스크린샷 2023-03-31 오전 11.42.02.png오류를 해결하려면 어떻게 해야 하나요?

 

답변 2

0

basePackage 부분을 hello.core 까지만 하시거나 주석 처리하시면 됩니다.

강의자료를 봐도 해당 부분은 basePackage 설정하는 부분은 안써져 있고 강의 보다 보니 강사님 설정에도 해당부분은 빠져있더라구요.

저도 따라 치다보니 해당부분 동일하게 오류났는데 영상에서만 쓰시고 지우신거 같습니다.

제가 놓친건지 지우시는부분은 못찾겠더라구요

0

안녕하세요. 김지수님, 공식 서포터즈 David입니다.

컨테이너 생성시, DiscountPolicy.class 대신 DiscountService.class를 넘겨보시겠어요?

감사합니다.

김지수님의 프로필 이미지
김지수
질문자

해당 부분 고쳐도 아래와 같이 출력과 오류메시지 나오고 안됩니다..

 

discountCode = fixDiscoountPolicy

discountPolicy = null

java.lang.NullPointerException: Cannot invoke "hello.core.discount.DiscountPolicy.discount(hello.core.member.Member, int)" because "discountPolicy" is null

//////////

코드 첨부합니다

package hello.core.autowired;

import hello.core.AutoAppConfig;
import hello.core.discount.DiscountPolicy;
import hello.core.member.Grade;
import hello.core.member.Member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.util.List;
import java.util.Map;

import static org.assertj.core.api.Assertions.*;

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, "userA", Grade.VIP);
        int discountPrice = discountService.discount(member,10000,"fixDiscoountPolicy");
        assertThat(discountService).isInstanceOf(DiscountService.class);
        assertThat(discountPrice).isEqualTo(1000);
        int rateDiscountPolicy = discountService.discount(member, 20000, "rateDiscountPolicy");
        assertThat(rateDiscountPolicy).isEqualTo(2000);
    }
    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);
        }
    }
}

 

 

김지수님의 프로필 이미지
김지수
질문자

AutoAppConfigTest 에서 basicScan 테스트 오류는 아래와 같습니다.

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.order.OrderServiceImpl' available

 

 

해당 AutoAppConfig 보면 강의와 같이 hello.core.member로 했습니다. 그래서 member패키지 밑에 order패키지도 있으니깐, 컴포넌트 스캔이자동으로 되서 빈이 잘 등록? 된다고 알고 있는데 빈을 찾을 수 없다고 오류나는 것 같아요 근데 왜 그런지 잘 모르겠습니다.

 

 

image

 

member와 order는 같은 레벨의 패키지 같습니다.

hello.core까지만 패키지를 지정하셔서 컴포넌트 스캔을 진행해 보시겠어요?

김지수님의 프로필 이미지
김지수

작성한 질문수

질문하기