-
카테고리
-
세부 분야
백엔드
-
해결 여부
해결됨
@Autowired 로 가져오는 Bean은 ?
21.03.09 00:31 작성 조회수 165
2
@Component
public class AppRunner implements ApplicationRunner {
// @Autowired
// ApplicationContext applicationContext;
@Autowired
MessageSource messageSource;
@Override
public void run(ApplicationArguments args) throws Exception {
// System.out.println(applicationContext.getClass());
System.out.println(messageSource.getClass());
}
Autowired 로 가져오는 Bean 이 햇갈려서 질문드립니다.
위 코드에서 @Autowired을 통해서 주입받는 빈은 MessageSource 가 구현된 클래스인걸로 아는데요..
AnnotationConfigServletWebServerApplicationContext , ResourceBundleMessageSource 두개 모두 문서를 찾아보니 MessageSource 를 구현한 클래스입니다~!
그런데 왜 "ResourceBundleMessageSource "가 빈으로 등록되는지 궁금합니다.
혹시 @Primary 같은 우선순위가 적용되서 그러는건가요 ?
답변을 작성해보세요.
4
백기선
지식공유자2021.03.10
좋은 질문 감사합니다. 둘 중에 빈 이름이 mssageSource인 빈을 주입해주기 때문에 ResourceBundleMessageSource가 의존성으로 주입된 겁니다.
스프링 부트가 제공하는 자동 설정중에 MessageSourceAutoConfiguration이라는 클래스에서 ResourceBundleMessageSource빈을 등록해 주는데 그때 빈 이름을 messageSource라는 이름으로 등록해 줍니다.
그리고 아마 다른 수업에서 설명했겠지만 @Autowired는 기본적으로 같은 타입의 빈이 여러개 있다면 그중에서도 같은 이름의 빈을 주입해 주죠. 같은 이름의 빈이 없다면 에러를 던지구요.
답변 1