Spring - bean 상속 설정하기

 

구성파일을 이용하여 bean의 상속 설정하기

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을 여러 개 선언해야 할 때 이러한 상속 구조를 사용하는 것이 좋다.
  • 이러한 구성상의 상속 기능은 상속 보다는 템플릿 작성 기능과 유사하다.