在设计类的时候,往往把多个类公共的部分抽象出来,做成父类,其余的类继承它。
Spring的配置文件也一样,当多个bean有公共部分时,为了减少配置量,也可以把公共的部分抽出来,其余的部分都“继承”它。
比如下面的两个实体
public class Bean1 { private int id; private String name; private String sex; //setter、getter }
public class Bean2 { private int id; private String name; private String sex; private int age; //setter、getter }
配置文件
<bean id="bean1" class="com.danny.spring.Bean3"> <property name="id" value="123"></property> <property name="name" value="Danny"></property> <property name="sex" value="male"></property> </bean> <bean id="bean2" class="com.danny.spring.Bean4"> <property name="id" value="123"></property> <property name="name" value="Danny"></property> <property name="sex" value="male"></property> <property name="age" value="26"></property> </bean>
Bean1和Bean2有三个属性都是相同的(并且属性值也相同,在真实的应用场景中有很多情况,多个不同的bean都有相同的依赖),在配置文件中就有一大半都是重复的。
这时可以把配置文件改一下,抽象出一个公共的“父类”,剩余的部分再“继承”它:
<bean id="abstractBean" abstract="true"> <property name="id" value="123"></property> <property name="name" value="Danny"></property> <property name="sex" value="male"></property> </bean> <bean id="bean1" class="com.danny.spring.Bean3" parent="abstractBean"/> <bean id="bean2" class="com.danny.spring.Bean4" parent="abstractBean"> <property name="age" value="26"></property> </bean>
上面配置中有一个“抽象Bean”——abstractBean,从它的abstract
属性值就可以看出,它不会被实例化,只会被其他的Bean“继承”。从bean1和bean2的parent
属性值可以看出,它们都“继承”了abstractBean。