ApplicationContext를 스프링 컨테이너라 하며 ApplicationContext는 인터페이스이다.
(AnnotationConfigApplicationContext가 ApplicationContext의 구현체)
AppConfig를 사용해서 직접 객체를 생성하고 DI를 하지 않고 스프링 컨테이너를 통해 수행
스프링 컨테이너는 @Configuration 어노테이션이 붙은 AppConfig를 설정 정보로 사용
@Bean 어노테이션이 붙은 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록
(스프링 컨테이너에 등록된 개체를 스프링 빈이라 한다.)
스프링 빈은 @Bean 어노테이션이 붙은 메서드의 명을 스프링 빈의 이름으로 사용
스프링 빈은 applicationContext.getBean() 메서드를 사용해서 찾을 수 있음
스프링 컨테이너에 객체를 스프링 빈으로 등록하고, 스프링 컨테이너에서 스프링 빈을 찾아 사용한다.
@Configuration
public class AppConfig {
@Bean
public MemberService memberService(){
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService(){
//...
}
public class OrderApp {
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService",MemberService.class);
OrderService orderService = applicationContext.getBean("orderService",OrderService.class);
//...
}
스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 함
ex) AppConfig.class
스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈을 등록
스프링 컨테이너는 설정 정보(AppConfig)를 참고해서 DI(의존관계 주입)수행
인프런 스프링 핵심 원리 - 기본편 (김영한) 참조