한 문장으로 말하자면 스프링에서 자바 객체들을 관리하는 공간이다.
제어의 역전(IoC)의존관계 주입(DI)싱글톤(Singleton)으로 관리한다 .. spring bean scope, singleton containerApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
ApplicationContext를 스프링 컨테이너라 한다.@Configuration
public class AppConfig {
@Bean
public OrderService orderService() {
return new OrderServiceImpl(discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
@Configuration을 붙여준다.@Bean을 붙여준다. 이렇게 하면 스프링 컨테이너에 스프링 빈으로 등록한다.public class SpringApplication {
public static void main(String[] args) {
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
final OrderService orderService = beanFactory.getBean("orderService", OrderService.class);
orderService.어쩌구();
}
}
ApplicationContext(스프링 컨테이너)가 알아서 객체를 생성하고 DI 한다.@Configuration이 붙은 AppConfig를 설정(구성)정보로 사용한다.@Bean이 붙은 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다. AppConfig appConfig = new AppConfig();
OrderService orderService = appConfig.orderService();
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
final OrderService orderService = beanFactory.getBean("orderService", OrderService.class);
기존에는 개발자가 직접 자바코드로 모든 것을 했다면 이제부터는 스프링 컨테이너에 객체를 스프링 빈으로 등록하고, 스프링 컨테이너에서 스프링 빈을 찾아서 사용하도록 변경되었다.




앞에서 ApplicationContext를 스프링 컨테이너라고 칭했지만,
사실 정확히 말하자면 스프링 컨테이너는 BeanFactory와 ApplicationContext 로 구분할 수 있다.
이 글은 인프런 김영한님의 스프링 핵심 원리 - 기본편의 [섹션4. 스프링 컨테이너와 스프링 빈]을 기반으로 정리한 글입니다.
참고
