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

javabase님의 프로필 이미지
javabase

작성한 질문수

스프링 핵심 원리 - 기본편

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

findAllBean()에서@Autowired질문입니다.

해결된 질문

작성

·

1.5K

3

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]

여기서 ac를 통해 DiscountService를 빈을 등록했는데

@Autowired 어노테이션 사용시 에러나는 원인을 모르겠습니다.

답변 4

2

안녕하세요 혹시 해결하셨을까요?

1

이건 저도 생기네요..

Autowired members must be defined in valid Spring bean (@Component|@Service|...)

0

강의 보다가 저도 빨간줄이 나왔지만 해결하였기에 답변드립니다.
해당 밑줄은 인텔리제이 버전별 설정 차이인것으로 보이며
일단 제 경우는 IntelliJ IDEA 2023.1.3 (Ultimate Edition) 버전을 사용중입니다.
아마 이전버전으로 다운그레이드 하면 안 나올 수도 있다 생각합니다.

본론으로 들어가서 해당 오류가 나는 원인을 추측해보면
IDE에서는 컴포넌트 자동스캔설정도 안되어있고 설정정보도 없다고 생각되기에 해당 오류가 나온것 같구요

해결방법은
DiscountService 위에 @Component 를 붙이는 겁니다.

제 대답이 정확힌 대답인지는 모르겠는데 저는 이렇게 했을때 오류도 없었습니다.

모두 즐코!
image

0

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

에러로 인한 질문이실 경우 에러 내용을 함께 올려주시면 답변에 큰 도움이 됩니다.

감사합니다.

javabase님의 프로필 이미지
javabase
질문자

강의에서 강사님 코드는 ac를 통해 discountservice 빈을 등록해서 discountservice메소드에 @component를 등록하지 않아도 autowired시 빨간줄이 안생기는데 저 같은경우에는 빨간밑줄이생깁니다.

빨간 줄에 마우스를 가져다 대면 오류 문구를 표시해 줍니다.

해당 문구를 캡쳐를 요청드립니다.

javabase님의 프로필 이미지
javabase
질문자

image

image

 

 

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 정우님

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

추가로 다음 내용도 코멘트 부탁드립니다.

1. 실행 방법을 알려주세요.

2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.

감사합니다.

javabase님의 프로필 이미지
javabase
질문자

https://drive.google.com/file/d/1ngXlBnMJm5lR4oj4W3AV6OnvkBnlNYo_/view?usp=sharing

test
AllBeanTest클래스 에서

 

ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class);

빈을 주입하고나서

 

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

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

@Autowired에서 빨간줄이 생기면서 오류가 납니다.

원래대로 라면 DiscountService클래스에 @Component를 안해줘도 의존성 주입이 가능 한걸로 알고 있습니다.

올려주신 프로젝트를 열었을 때 별도로 에러가 발생하진 않는데, 혹시 테스트도 실패하시나요?

image

javabase님의 프로필 이미지
javabase
질문자

테스트는 성공하는데 빨간 밑줄이 생깁니다..

해당 문제는 인텔리제이 버그로 보여집니다.

강의 진행하시는데 문제 없지만 찝찝하시다면 인텔리제이 재설치를 권장합니다.

javabase님의 프로필 이미지
javabase

작성한 질문수

질문하기