1. Spring IOC 컨테이너 및 Bean 소개
- IoC는 **
DI(dependency injection)
**라고도 한다. 객체가 생성자 인수(param), 팩토리 메소드에 대한 인수(param) 또는 객체 인스턴스가 생성되거나 팩토리 메소드에서 반환된 후 객체 인스턴스에 설정된 속성을 통해서만 객체의 종속성(즉, 작업하는 다른 객체)을 정의하는 프로세스이다.
- 컨테이너는 이후 빈을 생성할 때 이러한 종속성을 주입한다. 이 프로세스는 근본적으로 빈 자체의 역순(즉, 제어의 반전)으로 클래스의 직접 구성이나 서비스 로케이터 패턴과 같은 메커니즘을 사용하여 종속성의 인스턴스화 또는 위치를 제어한다.
- **
org.springframework.beans
**와 org.springframework.context
패키지는 Springframework의 IoC 컨테이너의 기본이다. BeanFactory 인터페이스는 모든 유형의 객체를 관리할 수 있는 고급 구성 메커니즘을 제공한다. ApplicationContext는 BeanFactory의 하위 인터페이스이다.
- ApplicationContext는 BeanFactory에 다음 기능을 추가한다.
- Spring의 AOP 기능과 보다 쉽게 통합 가능
- 메시지 리소스 처리(국제화에 사용)
- 이벤트 게재
- 웹 응용프로그램에서 사용하기 위한 **
WebApplicationContext
**와 같은 응용프로그램 계층별 컨텍스트
- 간단히 말해, BeanFactory는 구성 프레임워크와 기본 기능을 제공하고 ApplicationContext는 엔터프라이즈 고유 기능을 추가한다.
- ApplicationContext는 BeanFactory의 완전한 상위 집합이며 Spring의 IoC 컨테이너에 대한 설명에서 독점적으로 사용된다.
- 스프링에서는 애플리케이션의 백본을 형성하고 Spring IoC 컨테이너에 의해 관리되는 객체를 Bean이라고 한다.
- Bean은 Spring IoC 컨테이너에 의해 인스턴스화, 조립 및 관리되는 객체이다. 그렇지 않으면, Bean은 애플리케이션의 많은 객체 중 하나일 뿐이다.
- Bean, 그리고 그들 사이의 종속성은 컨테이너에 의해 사용되는 구성 메타데이터에 반영된다.
1-1. Container Overview(컨테이너 개요)
org.springframework.context.ApplicationContext
인터페이스는 Spring IoC 컨테이너를 나타내며 빈의 인스턴스화, 구성 및 조립을 담당한다.
- 컨테이너는 구성 메타데이터를 읽음으로써 인스턴스화, 구성 및 조립할 객체에 대한 지침을 얻는다.
- 구성 메타데이터는 XML, Java Annotation 또는 Java 코드로 표현된다.
- 응용프로그램을 구성하는 객체와 해당 객체 간의 풍부한 상호 의존성을 표현할 수 있다.
- ApplicationContext 인터페이스의 여러 구현은 Spring과 함께 제공된다.
- 독립 실행형 응용 프로그램에서는
ClassPathXmlApplicationContext
또는 **FileSystemXmlApplicationContext
**의 인스턴스를 만드는 것이 일반적이다.
- XML이 구성 메타데이터를 정의하는 전통적인 형식이었지만, 이러한 추가 메타데이터 형식을 선언적으로 지원할 수 있도록 소량의 XML 구성을 제공하여 컨테이너에 Java 주석이나 코드를 메타데이터 형식으로 사용하도록 지시할 수 있다.
- 대부분의 응용 프로그램 시나리오에서는 Spring IoC 컨테이너의 인스턴스를 하나 이상 인스턴스화하는 데 명시적인 사용자 코드가 필요하지 않다.
- 예를 들어, 웹 응용 프로그램 시나리오에서는 응용 프로그램의
web.xml
파일에 있는 boilplate
웹 설명자 XML을 간단히 8줄 정도 사용하면 일반적으로 충분하다.