반응형

Spring - IoC Containers


(원문 위치 : http://www.tutorialspoint.com/spring/spring_ioc_containers.htm )

Spring Container는 Spring framework Core에 있다. Container는 객체를 생성하고 이들을 묶고(wire), 설정하고 생성에서 소멸까지의 완전한 lifecycel을 관리한다. Spring container는 application을 구성하는 component를 관리하기 위해 DI(Dependency Injection)을 사용한다. 이 객체가 Spring Bean으로 추후 다시 이야기된다.

Container는 제공된 설정 metadata를 읽어 객체가 초기화, 설정, 그리고 조립되는 명령을 갖는다. 설정 metadata는 XML, JAVA annotation 또는 JAVA code로 표현된다. 아래 그림은 Spring이 어떻게 동작하는지에 대한 고차원적 시각이다. Spring IoC Container는 Java POJO (Plain Old Java Object) class를 유용하게 만들고 설정 metadata가 전체적으로 설정되고 실행가는ㅇ한 system또는 application을 만들게 한다.

Spring IoC Container
 
Spring은 두가지 형태의 Container를 제공한다.
1. Spring BeanFactory Container
    : org.springframewrok.beans.factory.BeanFactory interface로 정의되고 기본 DI를 지원하는 
    가장 간단한 container이다. BeanFactory와 BeanFactoryAware, InitializingBean, DisposableBean같은 
    관련 interface는 Spring과 통합하는 다수의 third-party framework와의 
    backward compatibility(구버전과의 호환성?)의 목적으로 여전히 Spring에 남아있다.
2. Spring ApplicationContext Container
    : 이 Container는 property file로부터 textual message를 처리하기 위한 기능과 관심있는 event listener에게 
    application event를 publish하기 위한 기능같은 구체적인 enterprise 기능(enterprise-specific)을 더욱 추가한다. 
    이 container는 org.springframework.context.ApplicationContext interface에 의해 정의된다.


ApplicationContext container는 BeanFactory container의 모든 기능을 포함한다. 따라서 일반적으로 ApplicationContext의 사용이 권장된다. BeanFactory는 data volume과 속도가 중요한 applet기반 application이나 모바일같은 가벼운 application에서 사용되어질 수 있다.

(--> 실제로 2015.8월 현재 Eclipse Mars에서 BeanFactory를 이용한 예제를 작성하여 실행 시,

      오류없이 실행되기는 하지만, 에디터창에서 BeanFactory관련 API는 모두 취소선 처리가 되어 동작되는 것을 볼 수 있다. 즉, 사용하지 말자는 이야기를 온몸으로 표현하고 있는...?

 --> 관련 예제는 다음 포스팅에서...)


Dependency Injection (DI):

(원문 위치 : http://www.tutorialspoint.com/spring/spring_overview.htm )
( DI에 관한 개략적 설명은 overview쪽에 되어 있었으나, 여기서 보는게 더 낫다고 생각해 여기다 적는다.)

: Spring을 가장 특징적으로 하는 기술은 IoC(Inversion of Control)의 DI(Dependency Injection)이다. IoC는 범용적인 개념(gerneal concept)이다. 그래서 여러 다른 방식으로 표현되어질 수 있고, DI는 단지 IoC의 구체적인 하나의 예이다.


복잡한 Java application을 작성할 때, application class는 다른 java class가 재사용의 가능성을 증가시킬 수 있기때문에 그리고 unit testing을 하는 동안 다른 class에 독립적으로 테스트하기 위해 독집적이어야 한다.


정확히 DI(Dependency Injection)가 뭘까? 두 단어를 분리해서 보자. 여기 dependency 부분은 두 class간의 관계로 볼 수 있다. 예를들면, class A는 class B에 독립적이다. 이제, 두번째 injection을 보자. 이것은 class B가 IoC에 의해 class A로 삽입(injection)될 것임을 의미한다.


DI는 생성자(Constructor) 또는 setter함수를 사용하여 post-construction(생성후)에 의해 인자를 넘겨주는 방법(passing parameter)의 방법으로 사용될 수 있다. 이에 대한 예제는 이후 강좌에 나온다.

반응형

+ Recent posts