한 문장으로 말하자면 스프링에서 자바 객체들을 관리하는 공간
이다.
제어의 역전(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. 스프링 컨테이너와 스프링 빈]을 기반으로 정리한 글입니다.
참고