Подтвердить что ты не робот

Вложение spring зависимости в абстрактном суперклассе

У меня есть требование ввести зависимость в абстрактном суперклассе с помощью spring framework.

class A extends AbstractClassB{ 
    private Xdao daox ;
    ...
    public setXdao() { ... }
}

class AbstractClassB{
    ..
    private yDao  daoy;
    public seyYdao() { ... }
}

Мне нужно передавать зависимость суперкласса каждый раз, когда я создаю абстрактный класс B (который может быть подклассифицирован по 100 способами в моем проекте)

в файле application.xml(spring)

<bean id="aClass" class="com.mypro.A" 
    <property name="daox" ref="SomeXDaoClassRef" /> 
    <property name="daoy" ref="SomeYDaoClassRef"/>
</bean>

Как я могу просто создать ссылку bean суперкласса AbstractClassB в application.xml, чтобы я мог использовать его во всем подклассе bean создании?

4b9b3361

Ответ 1

Вы можете создать абстрактное определение bean, а затем "подтип" этого определения, например

<bean id="b" abstract="true" class="com.mypro.AbstractClassB">
    <property name="daox" ref="SomeXDaoClassRef" /> 
</bean>

<bean id="a" parent="b" class="com.mypro.A">
    <property name="daoy" ref="SomeYDaoClassRef" /> 
</bean>

Строго говоря, определение для b даже не требует указания класса, вы можете оставить это:

<bean id="b" abstract="true">
    <property name="daox" ref="SomeXDaoClassRef" /> 
</bean>

<bean id="a" parent="b" class="com.mypro.A">
    <property name="daoy" ref="SomeYDaoClassRef" /> 
</bean>

Однако, для большей ясности и предоставления вашим инструментам больше шансов помочь вам, часто лучше оставить его.

В разделе 3.7 руководства Spring обсуждается наследование определения bean.

Ответ 2

Вы можете использовать абстрактный флаг Spring, чтобы сообщить Spring, что класс является абстрактным. Тогда все конкретные реализации могут просто отметить этот bean как родительский bean.

<bean id="abstractClassB" class="AbstractClassB" abstract="true">
  <property name="yDao" ref="yDao" />
</bean>

<bean id="classA" class="A" parent="abstractClassB">
  <property name="xDao" ref="xDao" />
</bean>