Spring Container는 Spring에서 사용되는 DI Container이다.
Spring Container는 BeanFactory와 ApplicationContext를 구분되지만, BeanFactory를 직접 사용하는 경우는 거의 없다.
또 ApplicationContext는 BeanFactory는 상속하여 사용하기 때문에, ApplicationContext를 Spring Container라고 간주해도 무관하다.
(최소한 이 글에서는 그렇다.)
ApplicationContext는 Interface이다.
DI Container를 여러 방법을 관리할 수 있도록 만들어졌다.
Java Code, XML File 혹은 Custom 파일(Groovy)로도 Spring Container를 설정할 수 있다.
각각 AnnotationConfigApplicationContext, GenericXmlApplicationContext, XxxApplicationContext에 해당한다.
예전에는 꼴도 보기 싫은 XML로 Dependency를 관리했다는데, SpringBoot가 도입되면서 무조건 Java Code로 관리한다.
Java Code 내 AnnotationConfigApplicationContext가 생성되면,
new AnnotationConfigApplicationContext(AppConfig.class)
위와 같이 Spring Container가 생성된다.
AppConfig class의 정보를 가져온다.
AppConfig class 내의 Method들을 참고하여, Spring Bean을 등록한다.
Annotation을 이용해, Bean 이름을 직접 부여할 수 있다. @Bean(name="memberServiceAnother")
여기서, Bean 이름은 중복되면 안된다.
AppConfig class를 참조하여, Bean 간 의존관계를 주입한다.