@Configuration , @Bean

memberService , memberRepository, orderService , discountPolicy 들이 스프링 컨테이너에 등록이 된다.

ApplicationContext 를 스프링 컨테이너 라고 한다.
스프링 컨테이너에게 환경정보를 던져주면, 스프링 컨테이너가 그것을 관리한다.
기존에는 개발자가 AppConfig.class 를 사용해서 객체를 생성하고 DI 를 했지만, 스프링 컨테이너를 통해서 사용한다.
스프링 컨테이너는 @Configuration 이 붙은 AppConfig 를 설정(구성) 정보로 사용한다. 여기서, @Bean 이 붙은 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라 한다.
스프링 빈 은 @Bean 이 붙은 메서드 명을 이름으로 사용한다.
스프링 빈을 찾을 때에는 applicationContext.getBean() 메서드를 사용해서 찾을 수 있다.
이름을 바꿀 수도 있다. 특별한 경우가 아니면 그냥 관례를 따르자.
참고
@Bean(name = "abc")
public MemberService memberService() {
...
}