강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của st0584
st0584

câu hỏi đã được viết

Công nghệ cốt lõi của Spring Framework

IoC Container Phần 7: MessageSource

@Autowired 로 가져오는 Bean은 ?

Đã giải quyết

Viết

·

276

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 같은 우선순위가 적용되서 그러는건가요 ? 

springjava

Câu trả lời 1

5

whiteship님의 프로필 이미지
whiteship
Người chia sẻ kiến thức

좋은 질문 감사합니다. 둘 중에 빈 이름이 mssageSource인 빈을 주입해주기 때문에 ResourceBundleMessageSource가 의존성으로 주입된 겁니다.

스프링 부트가 제공하는 자동 설정중에 MessageSourceAutoConfiguration이라는 클래스에서 ResourceBundleMessageSource빈을 등록해 주는데 그때 빈 이름을 messageSource라는 이름으로 등록해 줍니다.

그리고 아마 다른 수업에서 설명했겠지만 @Autowired는 기본적으로 같은 타입의 빈이 여러개 있다면 그중에서도 같은 이름의 빈을 주입해 주죠. 같은 이름의 빈이 없다면 에러를 던지구요.

Hình ảnh hồ sơ của st0584
st0584

câu hỏi đã được viết

Đặt câu hỏi