bean에 등록하기 위해서는 AppConfig 파일에 @Bean으로 등록해줘야 한다.
@Configuration
public class AppConfig {
@Bean
public MemberService memberService(){
return new MemberServiceImpl(getMemberRepository());
}
@Bean
public MemoryMemberRepository getMemberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService(){
return new OrderServiceImpl(getMemberRepository(), getDiscountPolicy());
}
@Bean
public DiscountPolicy getDiscountPolicy() {
return new RateDiscountPolicy();
}
}
Bean 등록 후 spring 실행시 초기 화면에 singleton으로 스프링 컨테이너에 등록된 것을 알 수 있다.
이후 Bean 호출 하고 싶을 시 ApplicationContext를 이용하여 AppConfig 호출 후 getBean메소드를 통해 호출한다.
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
OrderService orderService = applicationContext.getBean("orderService", OrderService.class);
new AnnotationConfigApplicationContext(AppConfig.class); 를 통해 스프링 컨테이너 생성
생성된 스프링 컨테이너는 AppConfig.class 구성정보 활용
AppConfig.class를 참고하여 의존관계를 설정한다.
@Configuration
public class AppConfig {
@Bean
public MemberService memberService(){ //memberService는 getMemberRepository를 의존함
return new MemberServiceImpl(getMemberRepository());
}
@Bean
public MemoryMemberRepository getMemberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService(){ //orderService는 getMemberRepository, getDiscountPolicy를 의존
return new OrderServiceImpl(getMemberRepository(), getDiscountPolicy());
}
@Bean
public DiscountPolicy getDiscountPolicy() {
return new RateDiscountPolicy();
}
}