2010-11-21 2 views
26

У меня есть требование ввести зависимость в абстрактном суперклассе с использованием весеннего каркаса.Инъекционная пружинная зависимость в абстрактном суперклассе

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

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

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

запись в application.xml (весна файл контекста)

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

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

ответ

37

Вы можете создать абстрактное определение бина, а затем «подвид», что определение, например,

<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> 

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

Section 3.7 of the Spring Manual обсуждает определение наследования фасоли.

+0

Perfect !! Большое спасибо ... это сработало ... Ты спас мой день – bob

+0

Отлично! Это сработало. – bob

+0

Откат. Новое изменение указывает на раздел 5.7, а не на 3.7. – K3N

3

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

<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> 
+0

Возможно, вы имеете в виду 'parent' вместо' extends'? – Muhd

+0

спасибо за указание .. исправлено – peakit

Смежные вопросы