Spring ApplicationContexts

Spring 에플리케이션의 심장과 정신에 해당하는 ApplicationContext 안에서 실제 DI를 수행합니다.

ApplicationContext는 BeanFactory를 특화시킨 것입니다.(ApplcationContext가 BeanFacotory를 상속받았죠.) BeanFactory는 Spring에서 사용되는 객체들의 레지스트리입니다. BeanFactory는 bean의 생성과 그들 간의 종속성 주입, 그리고 bean lookup(찾아 주기)를 담당합니다.

ApplicationContext는 이러한 BeanFactory의 기능에 부가적인 기능을 추가시킨 것입니다. 보통 BeanFactory대신에  이것을 사용한답니다. 웹 에플리케이션의 경우 웹에 특화된 WebApplicationContext를 사용합니다. ApplicationContext는 BeanFactoryPostProcessors를 가지고 초기화를 거친 후에 BeanFactory를 자동으로 처리할 수 있다고 합니다.(뭐가 어떻게 돌아간다는 건지는 잘 모르겠네요--;) 이밖에도 메시지를 internationalication(국제화)하는 기능, loosely coupled(약하게 결합된) 생산자와 소비자를 위한 event-routing mechanism, ApplicationContextAware같은 생명주기 인터페이스를 지원합니다.

ApplicationContext는 주로 XML 파일을 사용하여 bean들을 설정합니다. 매우 간단한 applicationContext.xml파일을 보겠습니다.

위 설정 파일에서 두 개의 bean을 등록한 것을 볼 수 있습니다. 이 bean들을 생성하고 관리하는 것이 ApplicationContext가 할일 입니다. 저 위의 <property> 속성을 보시면 Dependency Injection을 정의해 둔 것을 볼 수 있습니다. cashRegister bean에서 priceMatrix 레퍼런스가 priceMatrixBean을 사용하도록 정의한 것입니다.

위 설정 파일 없이도 그러한 것은 다음 순수 java code로도 가능합니다.

The Return of the POJO

이전 글과 이번 글에 걸쳐 DI와 ApplicationContext에 대해 배웠습니다. 이 두 개념은 Spring의 핵심 개념입니다. 이 것들을 에플리케이션(심지어 웹 에플리케이션 마저)을 Plain Old Java Object(POJO)로 개발 하기 위한 도구 입니다. 이것이 가능하기 때문에 강력한 Object Oriented 개념을 웹 에플리케이션 개발에 사용할 수 있습니다. 프레임웤에 특화된 코드를 작성하기 보다 비즈니스 로직에만 집중하여 개발하기 때문입니다. 이 책에서는 앞으로 도메인 객체를 먼저 작성하고 그런 다음 프레임웤을 사용하여 그것들을 웹 에플리케이션으로 향상시도록 할 것입니다.

여기까지 1장을 모두 요약하자면

  • Dependency Injection은 Inversion Of Control의 한 종류이다. 이것은 코드에 종속성을 주입하는 원리이다. 이것을 사용하면 객체 생성 또는 그것을 위치시키는 일을 프레임웍에게 전가 시키기 때문에 코드 자체의 테스트가 용이해진다.
  • ApplicationContext는 Spring의 주요 객체 레지스트리와 통합 포인트다. 주로 XML파일을 통해서 bean과 그들의 종속성을 설정한다. 많은 기능이 있지만 그 중에 객체 생성과 DI가 핵심 기능이다.
  • 마지막으로 POJO 스타일로 개발이 가능하다는 것이다. 따라서 객체 지향 개발 기술의 사용이 가능하며 POJO로 개발 된 시스템은 테스트가 용이하고 유연하다. 또한 개발자들이 프레임웤을 어떻게 다루는지 보다는 문제 영역과 비즈니스 로직에 집중하여 개발이 가능해진다.