@Configuration //이게 Annotation기반으로 구성한 것이다.
public class AppConfig {
@Bean
public MemberService memberService(){
return new MemberServiceImpl(memberRepository());
}
}
//스프링 컨테이너 생성
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(AppConfig.class);
//ApplicationContext 인터페이스의 구현체
//매개변수 (AppConfig.class) 부분은 구성정보라고도 한다.
//어떤 정보를 바탕으로 컨테이너를 생성할지를 정하는 것.
<aside> 💡 더 정확히는 스프링 컨테이너를 부를 떄 BeanFactory, ApplicationContext로 구분해서 이야기한다. BeanFactory를 직접 사용하는 경우는 거의 없으므로 일반적으로 ApplicationContext를 스프링 컨테이너라 한다.
</aside>
앞서 작성한 코드를 도식화하면 다음과 같다.


스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용하여 스프링 빈을 등록한다. 여기서 빈 이름은 기본적으로 메소드 이름을 사용하지만, 따로 부여할 수도 있다.
<aside> 💡 빈 이름은 중복되면 안된다. 처음부터 메소드 이름을 중복되지 않도록 설계를 해서 오류를 방지하는 게 좋다.
</aside>