인프런 김영한 님의 <스프링 핵심 원리 - 기본편> 강의 내용을 정리한 것입니다.
ApplicationContext
인터페이스를 스프링 컨테이너라 한다.
정확히는 스프링 컨테이너를 부를 때
BeanFactory
와ApplicationContext
로 구분한다.BeanFactory
를 직접 사용하는 경우는 거의 없기 때문에, 일반적으로ApplicationContext
를 스프링 컨테이너라 한다.
스프링 컨테이너는 XML이나 애노테이션 기반의 자바 설정 클래스로 만들 수도 있다.
스프링 컨테이너는 @Configuration
이 붙은 자바 클래스를 설정(구성) 정보로 사용한다. 여기서 @Bean
이 붙은 메서드를 모두 호출하여 반환된 객체를 스프링 컨테이너에 등록한다.
스프링 컨테이너에 등록된 객체를 스프링 빈이라 한다.
스프링 빈은 @Bean
이 붙은 메서드명을 스프링 빈 이름으로 사용한다.
new AnnotationConfigApplicationContext(AppConfig.class)
스프링 빈 조회시 부모 타입으로 조회하면 자식 타입도 함께 조회한다.
= Object 타입으로 조회하면 모든 스프링 빈 조회.
MessageSource : 메시지 소스를 활용한 국제화 기능
EnvironmentCapable : 환경변수
ApplicationEventPublisher : 애플리케이션 이벤트
ResourceLoader : 편리한 리소스 조회
xml 기반 설정은 최근 잘 사용하지 않지만, 레거시 프로젝트에 xml 로 되어 있는 경우가 있으므로 알아두는 것이 좋음.
스프링이 다양한 설정형식을 지원할 수 있는 이유는 BeanDefinition 으로 추상화되어 있기 때문.
스프링 컨테이너는 BeanDefinition만 알고 있기 때문에 설정 정보가 자바 코드인지, XML인지 알 필요가 없다.
BeanDefinition = 빈 설정 메타정보
@Bean
혹은 <bean>
당 하나씩 메타정보가 생성되며, 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다.