ApplicationContext
를 스프링 컨테이너라고 한다.@Configuration
이 붙은 AppConfig를 설정(구성) 정보로 사용한다. 여기서 @Bean
이 붙은 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 Spring bean
이라고 한다.@Bean
이 붙은 메서드의 이름을 스프링 빈 이름으로 사용한다.@Bean(name="이름 지정")
으로 다른 이름 지정이 가능하다.applicationContext.getBean(name, type)
메서드를 사용해 찾을 수 있다.1. 변경된 AppConfig.java
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
// 반환된 객체는 스프링 컨테이너에 등록된다.
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
2. 변경된 MemberApp, OrderApp
public class MemberApp {
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService ms = applicationContext.getBean("memberService", MemberService.class);
...
}
}
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);
...
}
}