bean 상속 설정하기
-
정의의 parent 속성을 이용하여 구성 파일 내에서 bean간의 상속관계를 설정할 수 있음 - 부모 bean의 정의를 룩업할 수 없게 하기 위해서는 abstract=“true” 속성을 추가한다.
<beans...>
<baen id="parent" class="com.apress...Singer"
p:name="John Mayer" p:age="39" />
<!-- parent 속성을 이용하여 위에 정의된 parent bean이 부모로서 상속되어야 함을 나타냄 -->
<baen id="child" class="com.apress...Singer"
parent="parent" p:age="0" />
</beans>
...
public class Singer {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "\t이름: " + name + "\n\t" + "나이: " + age;
}
}
...
public class InheritanceDemo {
public static void main(String...args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:spring/app-context-xml.xml");
ctx.refresh();
Singer parent = (Singer) ctx.getBean("parent");
Singer child = (Singer) ctx.getBean("child");
System.out.println("부모:\n" + parent);
System.out.println("자식:\n" + child);
}
}
/*
출력
부모:
이름: John Mayer
나이: 39
자식:
이름: John Mayer
나이: 0
*/
- child는 구성파일에서 parent를 부모로 설정하면서 age 속성에 0 값을 지정하였다. 따라서 name 속성은 부모의 값을 그대로 물려받고 age 속성은 새로 지정한 0이 출력되었다.
- 공유 속성 값을 사용해 동일한 값의 bean을 여러 개 선언해야 할 때 이러한 상속 구조를 사용하는 것이 좋다.
- 이러한 구성상의 상속 기능은 상속 보다는 템플릿 작성 기능과 유사하다.