Spring中的抽象Bean与抽象类有所不同。实际上,Spring中的抽象Bean甚至不必映射到任何类。以此为例:
<bean id="dao" abstract="true">
<property name="dataSource" ref="dataSource"/>
<property name="someHelper" ref="someHelper"/>
</bean>
<bean id="fooDao" class="FooDao" parent="dao">
<property name="fooHelper" ref="fooHelper"/>
</bean>
<bean id="barDao" class="BarDao" parent="dao">
<property name="barHelper" ref="barHelper"/>
</bean>
And classes:
public class FooDao {
private DataSource dataSource;
private SomeHelper someHelper;
private FooHelper fooHelper;
//setters
}
public class BarDao {
private DataSource dataSource;
private SomeHelper someHelper;
private BarHelper barHelper;
//setters
}
请注意,FooDao
并且BarDao
没有任何共同的父(无论是否抽象)基类。父抽象Bean定义仅用于对公共属性进行分组,因此可以避免在XML中重复。
另一方面,引入Dao
既可以继承FooDao
又可以BarDao
继承的抽象类是一个好主意:
public abstract Dao {
protected DataSource dataSource;
protected SomeHelper someHelper;
//setters
}
public class FooDao extends Dao {
private FooHelper fooHelper;
//setters
}
public class BarDao extends Dao {
private BarHelper barHelper;
//setters
}
但是dao
bean 仍然不需要定义一个类。当多个具体bean具有相同的依赖关系时,将抽象Bean视为减少XML重复的一种方法。