Spring - ApplicationContext의 중첩

 

여러 개의 ApplicationContext를 사용하는 방법

ApplicationContext의 중첩

  • Spring은 ApplicationContext의 중첩을 지원함
  • bean이 많은 대형 프로젝트에서는 여러개의 구성 파일이 사용 가능
  • GenericXmlApplicationContext 중첩 방법
  • local 속성을 사용하는 경우 부모 context를 참조할 수 없다.
public class HierarchicalAppContextUsage {

	GenericXmlApplicationContext parent = new GenericXmlApplicationContext();
	parent.load("classpath:spring/parent-context.xml");
	parent.refresh();

	GenericXmlApplicationContext child = new GenericXmlApplicationContext();
	child.load("classpath:spring/child-context.xml");
	// parent context가 부모가 된다.
	child.setParent(parent);
	child.refresh();

	...
}
<!-- parent-context.xml -->
<beans ...>
	<bean id="childTitle" class="java.lang.String" c:_0="Daughters" />

	<bean id="parentTitle" class="java.lang.String" c:_0="Gravity" />
</beans>
<!-- child-context.xml -->
<beans ...>
	<!-- parentTitl은 부모(parent-context.xml)에만 정의 되어 있으므로 부모를 참조한다. -->
	<bean id="song1" class="com.apress...Song"
		  p:title-reg="parentTitle" />
	<!-- childTitle은 부모(parent-context.xml)와 자식(현재 파일)에 모두 정의되어 있다. -->
	<!-- 이 경우 현재 파일을 우선 참조한다. -->
	<bean id="song2" class="com.apress...Song"
		  p:title-reg="childTitle" />

	<!-- childTitle은 부모(parent-context.xml)와 자식(현재 파일)에 모두 정의되어 있다. -->
	<!-- 하지만 ref 태그에서 parent 속성을 사용하고 있으므로 부모(parent-context.xml)에 있는 childTitle를 참조한다. -->
	<bean id="song3" class="com.apress...Song">
		<property name="title">
			<ref parent="childTitle" />
		</property>
	</bean>

	<bean id="childTitle" class="java.lang.String" c:_0="해당 값이 없습니다." />
</beans>