AppConfig에 설정을 구성한다는 뜻의 @Configuration을 붙여주고 각 메서드에 @Bean 을 붙여서 스프링 컨테이너에 스프링 빈으로 등록한다.
[AppConfig]
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
@Bean
public MemberService memberService(){
return new MemberServiceImpl(memberRepository());
}
@Bean
public OrderService orderService(){
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
}
[MemberApp]
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MemberApp {
public static void main(String[] args) {
// AppConfig appConfig = new AppConfig();
// MemberService memberService = appConfig.memberService();
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
[OrderApp]
스프링 빈에 제대로 등록된걸 확인할 수 있다.
ApplicationContext를 스프링 컨테이너라고 한다. 기존 코드에서는 AppConfig에서 개발자가 직접 객체를 생성하고 DI를 했지만 이번에는 스프링 컨테이너를 사용했다.
@Configuration이 붙은 클래스를 스프링 컨테이너는 설정 정보로 사용하며 @Bean에 등록된 메서드를 호출해서 반환된 객체를 스프링 컨테이너에 등록한다.
이 글은 김영한님의 스프링 핵심 원리 강의를 듣고 정리한 내용입니다.