Абстрактные бобы весной несколько отличаются от абстрактных классов. Фактически, абстрактный компонент весны даже не должен быть сопоставлен ни с одним классом. Возьмите это в качестве примера:
<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>
и классы:
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
не имеют родителей (абстрактную или нет) базового класса общего. Определение родительского абстрактного компонента используется только для общих свойств группы, поэтому вы избегаете повторения в 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
боб не должен определить класс. Относитесь к абстрактным бобам как к способу уменьшения дублирования в XML, когда несколько конкретных бобов имеют одинаковые зависимости.
Следует отметить, что абстрактные бобы не обусловлены весной –