BeanFactory 와 ApplicationContext .. 2가 인터페이스가 존재한다.
201207 참고로 XmlBeanFactory 는 deprecated 되었다. 모르겠으면 ApplicationContext를 쓰도록
BeanFactory
: BeanFactory 를 구현한 XmlBeanFactory가 존재한다.
외부 자원으로부터 설정 정보를 읽어 와 빈 객체를 생성한다.
Resource resource = new FileSystemResource("beans.xml");
XmlBeanFactory factory = new XmlBeanFactory(resource);
factoru.getBean("xxxx");
이런식으로 가능하다.
참고로 FileSystemResource 는 org.springframework.core.io 에 있는 대상으로 찾아보면 다른 타입도 존재한다.
혹은 org.springframework.web.context.support.ServiceContextResource도 있다.
ApplicationContext
: 이게.. 무려 BeanFactory 인터페이스를 상속받은 하위 인터페이스이다. (즉 BeanFactory가 조상??)
기본기능외에 빈 객체 라이프 사이클, 파일과 같은 자원처리 추상화, 이벤트 등 추가적인 기능을 제공한다.해서
이 인터페이스를 구현한 클래스가 주로 쓰인다.
WebApplicationContext 인터페이스는 웹 어플리케이션을 위한 ApplicationContext 이다.
ApplicationContext 및 WebApplicationContext를 구현한 중요클래스는...
org.sp...work.context.support.ClassPathXmlApplicationContext : 클래스패스 위치로부터...
org.sp...work.context.support.FileSystemXmlApplicationContext : 파일시스템 위치로부터
org.sp...work.web.context.support.XmlWebApplicationContext : 웹어플리케이션 위치에서부터
예로 클래스패스에 위차한 /config/applicationContext.xml 파일로부터 설정정보를 읽어와 사용하고 싶다면?
String configLocation = "config/applicationContext.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);
context.getBean("xxxx");
웹 어플리케이션에서 사용가능한 .. 걸 사용하는 경우는 web.xml에
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/applicationContext.xml</param-value>
</context_param>
어쩌구 저쩌구 하는데.. WebApplicationContextUtils 클래스를 직접적으로 사용하는 경우가 거의 없으므로 잊어라;
---------------------------------------------------------------------------------------------------------
빈 정의시에 하나의 빈을 만들어두고 그걸 확장해서 쓰는 형태로 하고 싶다면
<bean id="doorMonitor" parent="commonMonitor"/>
이런식으로 해도된다. (commonMonitor가 정의되어있어야겠지)
<bean id="commonMonitor" class="xxx.xxx.xxx.Monitor" abstract = "true">
<property name="a" value="1"/>
</bean>
--------------------------------
스프링에선 기본적으로 <bean> 을 선언하면 싱글톤이다. 하나의 객체만 생성되지.
다만 <bean ... 에 scope="xxx" 옵션으로 그 빈의 범위를 조정할 순 있다.
이때 주의할점은... scope가 prototye (사용할때마다 매전 생성되는 옵션) 인 빈을
일반선언한 (객체가 하나로 시작과 끝까지.. 하나의 객체라면,생명이 긴?) 빈에서 참조 (의존) 객체로 사용하는 경우
생명주기가 짧은(prototype) 빈의 설정에 <aop:scoped-proxy/> 선언을 해야 제대로 매번 생성된 객체를 사용하게 된다.
------------------------------------------------------------------------------------------------------------
외부의 프로퍼티 파일을 스프링 설정 파일로 사용하고 싶다면?
PropertyPlaceholderConfigurer을 찾아봐라
'IT > 스프링' 카테고리의 다른 글
Autowired / Resource 차이... !!!!! (0) | 2012.03.15 |
---|---|
Bean .. 빈 객체 스캔하여 빈 등록 (0) | 2012.02.29 |
뷰 영역??? (0) | 2012.01.26 |
@RequestBody , @ResponseBody (0) | 2012.01.20 |
WebApplicationContext 직접접근? (0) | 2012.01.19 |