컨테이너란 내부에 또 다른 컴포넌트를 가지고 있는 어떤 컴포넌트를 의미한다.
스프링 컨테이너는 내부에 존재하는 애플리케이션 빈의 생명주기를 관리한다.
Bean 생성, 관리, 제거 등의 역할을 담당한다.
인터페이스로 구현되어 있는 ApplicationContext 를 의미한다.
5-1.서로 다른 빈을 연결해 애플리케이션의 빈을 연결하는 역할
5-2.모듈 간에 의존 및 결합으로 인해 발생하는 문제 해결
5-3.메서드를 호출하기 위해 필요한 매개 변수를 준비해서 전달하지 않음
Spring Container 를 사용하는 이유는 앞서 나온 IoC / DI 처럼 new 키워드의 사용을 지양하기 위해서 이다. 이를 통해 의존성을 낮추어 (결합도를 낮추어) 객체 지향 프로그래밍을 가능하게 해준다. 이때 사용되는 것이 Spring Container 이다.
// Spring Container 생성
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
Spring Container에 의해 관리되는 재사용 소프트웨어 컴포넌트 (자바 객체)
Spring 컨테이너는 Bean 을 관리하며, 하나 이상의 빈을 관리한다.
메타 데이터 : 데이터에 대한 구조화된 데이터로, 연관된 정보를 제공해주는 데이터
5-1. XML 또는 자바 애너테이션, 자바 코드로 표현합니다.
5-2. 컨테이너의 명령과 인스턴스화, 설정, 조립할 객체를 정의합니다.
컨테이너는 먼저 객체를 생성하고 객체를 서로 연결
객체를 설정하는 단계를 지나 마지막으로 생명주기 전반을 관리
컨테이너는 객체의 의존성을 확인해 생성한 뒤 적절한 객체에 의존성을 주입
스프링은 스프링 컨테이너를 통해 객체를 관리
스프링 컨테이너에서 관리되는 객체를 빈(Bean)이라고 함
@Configuration : 구성정보를 담당하는것을 설정할때 @Configuration 을 붙여줍니다.
@Bean : 각 메서드에 @Bean을 붙이면 스프링 컨테이너에 자동으로 등록이 됩니다.