ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
스프링 컨테이너는 ApplicationContext
라는 인터페이스를 뜻한다.
정확히는
BeanFactory
가 맞다. 하지만 개발자가 스프링 빈과 컨테이너를 사용하는 기능은ApplicationContext
라는 구현체가 다 해주기 때문에ApplicationContext
를 스프링 컨테이너로 알고있으면 된다.
스프링 컨테이너는 AppConfig.class
같은 설정정보를 바탕으로 스프링 빈 저장소에 빈 이름과 빈 객체에 등록을 해준다.
위와 같이 스프링 컨테이너는 스프링 빈에 등록이 되면 설정 정보를 참고해서 의존관계 주입(DI) 한다.
BeanFcatory
인터페이스가 스프링 컨테이너의 실체이다.BeanFactory
를 직접 건들지 않아도 된다.BeanFacotry
가 최상위 인터페이스이다.MessageSource
Environmentcapable
ApplicationEventPublisher
ResourceLoader
💡스프링은 다양한 설정 형식을 지원한다. 이런 유연한 설계가 가능한 이유는
BeanDefinition
이라는 추상화 덕분이다.
@Bean
하나씩 메타 정보가 생성된다.