스프링 컨테이너는 내부에 존재하는 애플리케이션 빈의 생명주기를 관리한다.
스프링에서 자바 객체들을 관리하는 공간을 말한다. 자바 객체를 스프링에선 빈(Bean)이라고 하는데, 스프링 컨테이너에서는 이 빈의 생성부터 소멸까지를 개발자 대신 관리해주는 곳이라고 할 수 있다.
즉, Bean 생성, 관리, 제거 등의 역할을 담당한다.
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(AppConfig.class);
스프링 컨테이너를 만드는 다양한 방법은 ApplicationContext 인터페이스의 구현체다.
Mac에서 Cmd + O → 클래스에서 ApplicationContext로 검색
Windows에서 Ctrn + N → 클래스에서 ApplicationContext로 검색
화면에서 가장 첫번째 파일인 ApplicationContext 인터페이스를 구현한 하위 클래스들이 나오는 걸 확인할 수 있다.
스프링 컨테이너의 최상위 인터페이스다.
BeanFactory는 빈을 등록하고 생성하고 조회하고 돌려주는 등 빈을 관리하는 역할을 한다.
getBean() 메소드를 통해 빈을 인스턴스화할 수 있다.
@Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용해 빈 등록을 한다.
BeanFactory의 기능을 상속받아 제공한다.
빈을 관리하고 검색하는 기능을 BeanFactory가 제공하고 그 외에 부가기능을 제공한다.
부가 기능 (참고용)
ApplicationContext 생성자에 제공된 위치 경로 또는 경로는 컨테이너가 로컬 파일 시스템, Java CLASSPATH 등과 같은 다양한 외부 리소스로부터 구성 메타데이터를 로드할 수 있도록 하는 리소스 문자열이다.
// Annotation
ApplicationContext context = new AnnotationConfigApplicationContext(DependencyConfig.class);
// XML
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
빈(bean)은 인스턴스화된 객체를 의미한다.
스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.
@Bean이 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다.
빈은 클래스의 등록정보, 게터/세터 메서드를 포함한다.
빈은 컨테이너에 사용되는 설정 메타데이터로 생성된다.
ApplicationContext 사용하여 bean 정의를 읽고 액세스할 수 있습니다.
// create and configure beans
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
// retrieve configured instance
PetStoreService service = context.getBean("memberRepository", memberRepository.class);
// use configured instance
List<String> userList = service.getUsernameList();
스프링은 다양한 설정 형식을 BeanDefinition이라는 추상화 덕분에 지원할 수 있는 것이다.
Bean은 BeanDefinition(빈 설정 메타정보)으로 정의되고 BeanDefinition에 따라서 활용하는 방법이 달라지게 된다.