#20.ApplicationContext의 분리(부모, 자식)
ApplicationContext의 분리(부모, 자식)
<!--[if !supportLists]-->n
<!--[endif]-->한 컨텍스는 다른 컨텍스트의 부모가 될 수 있다.
자식 컨텍스에 있는 빈이 부모 컨텍스트에 있는 빈 참조 가능한데 스프링은
ApplicationContext 중첩 기능을 제공 함으로서 설정을 여러 파일로 나눌 수 있게 해준다. 자식 컨텍스트에서 부모 컨텍스트의 빈을 참조하는 방식은 동일하다.
단 이름이 같은 것이 있다면 ref 태그에서 parent
속성을 사용하면 된다.
[parent.xml]
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">
<bean id="parent1"
class="java.lang.String">
<constructor-arg>
<value>parent bean
1</value>
</constructor-arg>
</bean>
<bean id="parent2"
class="java.lang.String">
<constructor-arg>
<value>parent bean
2</value>
</constructor-arg>
</bean>
</beans>
[child.xml]
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">
<bean id="target1"
class="onj.context.overlap.Onj">
<property
name="val1">
<ref
bean="parent1"/>
</property>
</bean>
<bean id="target2"
class="onj.context.overlap.Onj">
<property
name="val2">
<ref parent="parent2"/> <!– 부모 context에서
parent2라는 id,name을 검색 à
</property>
</bean>
<bean id="parent2"
class="java.lang.String">
<constructor-arg>
<value>child bean
2</value>
</constructor-arg>
</bean>
</beans>
[Onj.java]
package
onj.context.overlap;
public class Onj {
private String
val1;
private String
val2;
public String getVal1()
{
return
val1;
}
public void setVal1(String val1)
{
this.val1 =
val1;
}
public String getVal2()
{
return
val2;
}
public void setVal2(String val2)
{
this.val2 =
val2;
}
}
[ContextOverlapExam.java]
package
onj.context.overlap;
import
org.springframework.context.support.GenericXmlApplicationContext;
public class ContextOverlapExam
{
public static void main(String[] args)
{
GenericXmlApplicationContext parent =
new GenericXmlApplicationContext();
parent.load("classpath:parent.xml");
parent.refresh();
GenericXmlApplicationContext child = new
GenericXmlApplicationContext();
child.load("classpath:child.xml");
child.setParent(parent);
child.refresh();
Onj target1 = (Onj)
child.getBean("target1");
Onj target2 = (Onj)
child.getBean("target2");
String target3 = (String)
child.getBean("parent2");
System.out.println(target1.getVal1());
System.out.println(target2.getVal2());
System.out.println(target3);
}
}
댓글 없음:
댓글 쓰기