[Spring] BeanFactory와 ApplicationContext

|

 스프링 프레임워크는 IoC를 사용해 컴포넌트들을 관리한다. 컴포넌트간의 연관관계 등을 관리함으로써 객체를 명확하게 이해하고, 재사용이 가능하며, 단위테스트가 쉬워진다. 스프링은 이러한 컨테이너를 두가지 포함하고 있는데, 빈 팩토리와 애플리케이션 컨텍스트가 그것이다.

빈 팩토리기본적인 의존성 주입을 지원하는 가장 간단한 형태의 컨테이너이다.
애플리케이션 컨텍스트는 빈 팩토리의 개념 위에 프로퍼티 파일을 해석하고 이벤트를 발행하는 등의 능력이 구현된 것으로, 대부분의 경우 애플리케이션 컨텍스트를 많이 사용한다.

빈 팩토리는 org.springframework.beans.factory.BeanFactory 인터페이스로 정의 되고, 스프링 안에 많은 구현 클래스들이 존재한다. 그중 org.springframework.beans.factory.xml.XmlBeanFactory 가 가장 유용하다. 사용법은 아래와 같다.

BeanFactory factory = new XmlBeanFactory(new FileSystemResource("beans.xml"));

이 코드는 빈에 대한 정의만 읽어올 뿐 인스턴스화 하지는 않는다. 빈 자체가 필요하게 되기 전까지 인스턴스화 하지 않는데, 이를 "늦게 로딩(lazy loading)"된다고 말한다.

빈을 얻어오기 위해서는 다음과 같이 코드를 작성한다.

MyBean myBean = (MyBean) factory.getBean("myBean");

getBean()에 의해 팩토리는 의존성 주입을 통해 빈을 인스턴스화 한다.

애플리케이컨텍스트는 org.springframework.context.ApplicationContext 인터페이스로 정의되고, 구현 클래스들 중 일반적으로 사용되는 세 개는 다음과 같다.

ClassPathXmlApplicatoinContext : 클래스 경로에 있는 xml파일로부터 로딩
  예) ApplicationContext context = new ClassPathXmlApplicatoinContext("c:/config.xml");

FileSystemXmlApplicationContext : 파일 시스템에 있는 xml파일로부터 로딩
  예) ApplicationContext context = new FileSystemXmlApplicationContext("config.xml");

XmlWebApplicationContext : 웹 애플리케이션에 포함되있는데 xml파일로부터 로딩


 애플리케이션 컨텍스트는 싱글톤 방식으로 빈을 관리한다. 즉 컨텍스트를 시작시킬 때 모든 빈 들을 미리 로딩한다. 싱글톤 빈을 미리 로딩함으로써, 그 빈이 필요할 때 즉시 사용될 수 있도록 해준다.


이 글은 스프링노트에서 작성되었습니다.

And