• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

MessageSource를 ms로 바꾸면 Could not autowire라고 나옵니다.

22.05.18 18:40 작성 조회수 407

1

제목과 같이 MessageSource 변수명을 ms로 바꾸면 빨간줄이 나오는데 어떻게 해결해야 하나요?

강의 소스를 열어도 똑같이 빨간줄이 나옵니다.ㅜㅠ

 

@Aotuwired위에

@Qualifier("messageSource")

를 하면 되기는 하는데 왜 저는 @Qualifier을 해야 되는 걸까요?

 

 

답변 1

답변을 작성해보세요.

1

OMG님의 프로필

OMG

2022.05.18

안녕하세요. lwisekiml님, 공식 서포터즈 OMG입니다.

제공해드리는 프로젝트 코드에서

"message" 폴더를 열어서 코드 수정 하지않고 확인해주세요.("message-start" X)

제공해드리는 프로젝트 코드를 제 개발환경에서 인텔리제이 커뮤니티 버전(좌), 얼티메이트 버전(우) 다 확인해보았는데 올리신 에러메시지는 출력되지 않았습니다.

 


감사합니다.

lwisekiml님의 프로필

lwisekiml

질문자

2022.05.19

"message" 폴더에 있는 코드도 역시 빨간 줄이 나옵니다.

하다가 다른 해결 방법을 찾았는데, 위 사진과 같이 ms를 messageSource로 다 고치면 실행이 되는데 이유를 모르겠습니다. 혹시 이유를 알 수 있을까요?

 

OMG님의 프로필

OMG

2022.05.19

@Autowired는 타입 매칭 시도 후, 동일 타입이 존재하면 필드명으로 매칭을 시도하는데 이 부분에서 문제가 발생하는 것 같습니다.

 

생성자 주입으로 바꿔서 해보시겠어요?

private final MessageSource ms;

@Autowired
public MessageSourceTest(MessageSource messageSource) {
this.ms = messageSource;
}

+

다른 클래스에서도 필드 주입으로 메시지소스 주입 시 동일한 에러가 발생하는지요?

lwisekiml님의 프로필

lwisekiml

질문자

2022.05.20

생성자 주입으로 하니 정상 동작합니다. 

생성자 주입 관련 공부도 다시 해봐야 겠네요. 감사합니다.^^

 

+ 메시지, 국제화 강의에서 사용하는 다른 클래스에서는 @Autowired를 사용하지 않아 잘은 모르겠습니다. 여태까지 강의를 들으면서 이런 경우는 처음인것으로 보아 어느 부분인지는 모르지만 제 인텔리제이 설정이나 다른 부분이 잘못 되었을꺼 같습니다.

단순히 빨간줄만 없애는 것은 @SpringBootTest를 지우면 빨간 줄은 사라지지만, helloMessage()실행하면 아래와 같이 실행은 안됩니다.

 

 

OMG님의 프로필

OMG

2022.05.20

@SpringBootTest를 포함해야 테스트에서 스프링 컨테이너가 실행되어 빈 등록과 주입이 발생하며 스프링 테스트가 진행됩니다.