스프링 프레임워크의 레퍼런스를 읽어보는 시간을 가져보자
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 주석이 달린 방법을 사용한다.
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 |