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

+ Recent posts