Spring的父子Bean出现,我估计是会了有效的减少Spring上下文定义文件里冗余的XML.直白一点,就是对原来的Bean进行继承与扩展,这样就原有Bean中的定义就不用再继承的Bean里重新写一遍啦。
为了支持这种特性,Bean元素提供了两个特殊的属性:
parent:指明继承的父类Bean的id
abstract:如果设置为true,就表示bean的声明是抽象的,Spring不能对其进行实例化,只是用来供其他Bean进行扩展的,但也可以设置为假,这时父Bean也可以实例化。
测试源代码:
//一个普通的JavaBean
public class Person {
//人的名字
private String name;
//这个人要说的话
private String sentence;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSentence() {
return sentence;
}
public void setSentence(String sentence) {
this.sentence = sentence;
}
}
配置文件如下:
<bean id="test" abstract="true" class="com.pp.Person">
<property name="Sentence" value="Hello Spring"></property>
</bean>
<bean id="kev" parent="test">
<property name="Name" value="kev"></property>
</bean>
<bean id="dol" parent="test">
<property name="Name" value="dol"></property>
</bean>
对上面代码进行测试:
BeanFactory factory=new XmlBeanFactory(new ClassPathResource("person.xml"));
Person kev=(Person)factory.getBean("kev");
System.out.println(kev.getSentence());
Person dol=(Person)factory.getBean("dol");
System.out.println(dol.getSentence());