본문 바로가기

Spring

BeanFactory 인터페이스.


스프링에서는 객체를 컨테이너에서 관리 하는데 이 컨테이너와 관련된 인터페이스가
BeanFactory 인터페이스이다.

BeanFactory <- AppilcationContext <- WebApplicationContext 

이렇게 구성되어있다. (implements 하고 있음..)

BeanFactory 인터페이스는 가장 기본이 되는 것으로
일반적인 Application에서의 사용 되는 예를 보면

applicationContext.xml 파일에 빈 정보를 설정하고

pulbic class BeanFactoryMain {
 public static void main(String[] args) {
  Resource resource = new ClassPathResource("applicationContext.xml");
  BeanFactory beanFactory = new XmlBeanFactory(resource);
  SomeService ss = (MoreSomeService) beanFactory.getBean("svcname");
  ss.doSomething();
 }
}

이렇게 사용 할 수 있다.
어??? 스프링인데 웹 어플리케이션이 아닌 상태에서도 작동을 하네???

컨테이너라는 것을 웹컨테이너와 굳이 연관 짓지 말고 개념적으로 POJO 클래스들을 한곳에 모아서
관리 할 수 있는 공간이라고 생각해도 될지 모르겠다.

XmlBeanFactory는 BeanFactory 인터페이스를 구현한 클래스이다.

(Resource 구현 클래스에 대해서는 최범균님께서 쓰신 "스프링 2.5 프로그래밍 - 가메출판사" 를 보면 리스트가 나와있다.)

ApplicationContext 인터페이스는 BeanFactory 인터페이스를 상속 받은 하위 인터페이스이다. 기본 빈 관리 기능에 몇가지 추가 기능을 가지고 있다.

WebAppilcationContext 인터페이스는 바로 웹 어플리케이션을 위한 ApplicationContext이다. 하나의 ServletContext 마다 하나의 WebApplicationContext가 존재한다.

web.xml 의 설정을 사용하지 않고 직접 사용하는 예를 보면

String xmlDir = "applicationContext.xml"; // WEB-INF/
ApplicationContext ac = new ClassPathXmlApplicationContext(xmlDir);
SomeService ss = (MoreSomeService) ac.getBean("beanName");

이렇게 된다.

그리고 XmlWebApplicationContext 클래스가 있는데, web.xml 파일 설정을 통해 이 객체가 자동으로 생성되고 사용된다. (WebapplicationContext를 구현한 클래스중 하나이다.)

web.xml 에서 설정해 놓은

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
   /WEB-INF/spring/config/applicationContext*.xml
  </param-value>
 </context-param>
 
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

이 설정에 의해 ContextLoaderListener를 서블릿 컨텍스트로 등록해 놓으면
XmlWebApplicationContext 객체가 생성된다. (ContextLoaderListener가 웹 어플리케이션을 초기화 할 때 사용한다)

이렇게 생성된 XmlWebApplicationContext는
WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext()); // jsp 내장객체 ServletContext application = pageContext.getServletContext();
로 가져올 수 있다.

WebApplicationContext를 구현한 클래스들은
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext도 있는데 결국 XML 빈 설정 파일을 가져와서
WebApplicationContext를 생성 하는 것들이다.

웹어플리케이션상이 아닌 테스트 등을 진행 할 때 유용하게 사용 할 수 있을 것이다.