backend/Spring

[Spring] 스프링 컨테이너의 두 종류

버리야 2008. 2. 5. 14:09
반응형

스프링 컨테이너의 두 종류


컨테이너 안의 빈(Bean)

컨 테이너는 스프링 프레임워크의 핵심이다. 스프링 컨테이너는 제어 역행(IoC)을 사용해 애플리케이션을 구성하는 컴포넌트들을 관리한다. 여기에는 협력하는 컴포넌트간의 연관관계를 생성하는 것이 포함된다. 그렇게 함으로써 객체는 좀더 명확하게 이해할 수 있고, 재사용이 가능해지며, 단위테스트가 쉬워진다.


스프링 컨테이너의 두 종류


org .springframework.beans.factory.BeanFactory 인터페이스로 정의되는 빈 팩토리

기본적인 의존성 주입을 지원하는 가장 간단한 형태의 컨테이너



org .springframework.context.ApplicationContext 인터페이스로 정의되는 어플리케이션 컨텍스트.

프로퍼티 파일의 텍스트 메시지를 해석하는 능력이나 애플리케이션 이벤트를 관련된 이벤트 리스너에 발행하는 능력 등과 같은 애플리케이션 프레임워크 서비스를 제공함으로써 빈팩토리의 개념 위에 구현된 것.



빈 팩토리(BeanFactory)

팩토리 디자인 패턴을 구현한 것. 빈 팩토리는 빈을 생성하고 분배하는 책임을 지는 클래스

커스텀 초기화 메소드(initialization method)와 소멸 메소드(destruction method)를 호출함으로써 빈의 생명주기에 개입할 수 있다.


org .springframework.beans.factory.xml.XmlBeanFactory 가 가장 유용한데, XML 파일에 기술돼있는 정의를 바탕으로 빈을 로딩한다.


BeanFactory factory = new XmlBeanFactory(new FileInputStream( “beans.xml ”));

MyBean myBean = (MyBean) factory.getBean( “myBean ”);


빈 팩토리에게 XML 파일로부터 빈에 대한 정의를 읽어오라고 알려준다 . 빈 팩토리가 빈 을인스턴스화하는 것은 아니고 빈은 빈 팩토리에 “늦게 ”로딩되는데, 이 말은 빈 팩토리가 빈의 정의는 즉시 로딩하는 반면, 빈 자체가 필요하게 되기 전까지는 인스턴스화 하지 않는다.

getBean()이 호출되면, 팩토리는 의존성 주입을 이용해 빈을 인스턴스화하고 빈의 특성을 설정 시작. 여기서 빈의 일생이 시작된다.


애플리케이션 컨텍스트

BeanFactory와 유사한 기능을 제공하지만 좀 더 많은 기능을 제공하는 ApplicationCont ext


국제화(I18N) 지원을 포함해 텍스트 메시지를 해석하는 수단을 제공

이미지 등과 같은 자원을 로딩하는 범용적인 방법을 제공

리스너로 등록돼있는 빈에 이벤트를 발행할 수 있다.


구현 클래스 중 일반적으로 사용되는 세 개 의 클래스

ClassPathXmlApplicationContext : 클래스 경로에 있는 XML 파일로부터 컨텍스트 정의를 로딩하며, 컨텍스트 정의를 클래스 경로에 있는 자원으로 취급한다.

FileSystemXmlApplicationContext : 파일 시스템에 있는 XML 파일로부터 컨텍스트 정의를 로딩.

XmlWebApplicationContext : 웹 애플리케이션에 포함돼 있는 XML 파일로부터 컨텍스트 정의를 로 딩




애플리케이션 컨텍스트와 빈 팩토리의 또 다른 차이점 은 싱글톤(singleton) 빈을 로딩하는 방법에 있다. 빈 팩토리는 getBean() 메소드가 호출될 때까지 빈의 생성을 미룬다. 즉 빈 팩토리는 모든 빈을 lazy loading한다.




애플리케이션 컨텍스트는 싱글톤 빈을 미리 로딩 (preloading) 함으로써, 그 빈이 필요할 때 즉시 사용될 수 있도록 보장해준다. 즉 애플리케이션은 빈이 생성되기를 기다릴 필요가 없다는 뜻


반응형