스프링에서는 객체를 컨테이너에서 관리 하는데 이 컨테이너와 관련된 인터페이스가
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를 생성 하는 것들이다.
웹어플리케이션상이 아닌 테스트 등을 진행 할 때 유용하게 사용 할 수 있을 것이다.