2010-11-21 14 views
26

Tengo el requisito de inyectar la dependencia en la superclase abstracta utilizando el marco de primavera.Inyectar dependencia de primavera en super clase abstracta

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

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

tengo que pasar cada vez que la dependencia superclase i crear instancias de la clase B abstracta (que puede ser una subclase en 100 de las formas en mi proyecto)

entrada en aplicacion.xml (archivo de contexto primavera)

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

¿Cómo puedo crear una referencia de bean de la superclase AbstractClassB en application.xml para que pueda usarla en todas las creaciones de subclase Bean?

Respuesta

37

puede crear una definición abstracta de frijol, y luego "subtipo" esa definición, por ejemplo,

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

En sentido estricto, la definición de b ni siquiera requiere que especifique la clase, se puede dejar que fuera:

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

Sin embargo, para mayor claridad, y para dar un mejor sus herramientas posibilidad de ayudarlo, a menudo es mejor dejarlo.

Section 3.7 of the Spring Manual analiza la herencia de definición de bean.

+0

Perfecto !! Muchas gracias ... funcionó ... Salvaste mi día – bob

+0

¡Perfecto! Funcionó. – bob

+0

Rueda hacia atrás. La nueva edición apuntaba a la sección 5.7 no 3.7. – K3N

3

Puede usar la bandera abstracta de Spring para decirle a Spring que una clase es abstracta. Entonces, todas las implementaciones concretas pueden simplemente marcar este bean como su padre 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> 
+0

¿Quiere decir 'padre' en lugar de 'extiende' quizás? – Muhd

+0

gracias por señalar ... corregido – peakit

Cuestiones relacionadas