본문 바로가기

Spring/Reference

[reference] Spring Framework Core - Container

스프링 프레임워크의 레퍼런스를 읽어보는 시간을 가져보자

 

1. The IoC Container

스프링프레임워크가 구현한 IOC 의 원칙을 알아보자

IOC 는 DI (의존성 주입) 이라고도 한다.

dependency 를 가지는 객체는 오직 factory method 로 부터 주입이 된다.

그러면 IOC 컨테이너는 빈을 생성하는 시점에 그들의 종속성을 주입시키게 된다.

근본적으로 Service Locator 패턴과 같다고 한다.

 

 

beans 와 context 패키지는 스프링 IOC 컨테이너의 기본이다.

BeanFactory 인터페이스는 모든 타입의 Object 를 관리할 수 있는 고급 구성 메카니즘을 가지고 있다.

ApplicationContext 인터페이스는 BeanFactory 의 sub-interface 다.

 

ApplicationContext는 BeanFactory 에서 어떤것들이 추가 되었냐면,

- 스프링 AOP 의 기능과 더 쉽게 통합

- Web application 에서 사용하기 위한 WebApplicationContext 같은 응용 계층 context

- 메시지 리소스 처리(국제화에 사용)

- Event publication 

 

등이 있다.

 

bean은 Spring IOC 컨테이너에 의해 조립 , 관리되는 Object 를 말한다.

bean 은 application 의 object 일 뿐인데, 컨테이너가 사용하는 configuration metadata 에 의해 의존성이 반영된다.

 

 

1.2. Container Overview

ApplicationContext 인터페이스는 Spring IOC 컨테이너는 나타내며 bean 의 구성 및 조립을 담당한다.

컨테이너는 configuration metadata 를 읽음으로써 구성 및 조립할 객체의 대한 지침을 얻는다.

configuration metadata는  XML, Java annotations, or Java code로 되어있다.

 

ApplicationContext 는 몇가지의 구현체로 제공된다.

ClassPathXmlApplicationContext 또는 FileSystemXmlApplicationContext 의 인스턴스를 생성하는 것이 일반적임

 

대부분의 어플리케이션에서는 ApplicationContext를 구현할때 명시적으로 개발자가 적을 필요가 없다.

eclipse 에서만 해도 몇번의 마우스 클릭만으로도 구현할 수 있다.

 

그림에서 보는 것 처럼 application 이 Confuguration Metadata 와 결합하여 ApplicationContext 이 생성되고 초기화 된느걸 볼 수 있다.

 

 

1.2.1. Configuration Metadata

이제 , configuration metadata 가 뭔지 알아보자면

configuration metadata 는 나, 즉 application developer를 뜻한다. 스프링 컨테이너에게 

객체를 구성하고 조립하는 방법을 지시하는 거라고 할 수 있다.

 

전통적으로는 xml 방식으로 만들었지만 , 요새는 많은 개발자들이 자바 코드로 설정방식을 구현한다.

 

총 Metadata 를 구성하는 방법은 3가지가 있다 .

XML , Annotation , Java 코드 이 방식이 있는데 Annotation 과 Java 코드 방식은 뒤에서 다시 보기로 한다.

 

참고로 Annotation 방식은 Spring 2.5 부터 도입이 되었고

Java 코드 방식은 3.0 부터 도입이 되었다.

 

스프링 구성은 컨테이너가 관리해야 하는 하나 이상의 빈 정의로 구성된다. 

xml 기반에서는 최상위 수준의 <bean/> 요소 내부에 있는 <bean/> 요소로 구성한다. Java 구성에서는 일반적으로 @Configuration 클래스 내에서 @Bean 주석이 달린 방법을 사용한다.

 

xml 의 대표적인 형태

ApplicationContext 생성자에게 제공되는 resource strings 는 

컨테이너가 외부 리소스들로부터 configuration metadata를 load 할 수 있게 해준다.

 

1.2.3. Using the Container

이런식으로도 컨테이너에서 getBean 으로 사용할 수 있지만

이 방법은 절대 쓰면 안된다. 실제 어플리케이션 코드는 getbEAN() 같은 메서도 호출이 없어야 하고 

Spring API 에 전혀 의존하지 말아야 한다.

이런 방법 말고 다양한 종속성 주입을 제공 하므로 메타데이터를 통해 특정 빈에 대한 종속성을 선언 할 수 있다.

 

 

'Spring > Reference' 카테고리의 다른 글

[reference] Spring Framework Core - Bean  (0) 2020.04.15
Spring Boot - Reference  (0) 2020.04.13