在抽象超类中注入spring依赖项

时间:2010-11-21 16:49:07

标签: spring dependency-injection

我需要使用spring框架在依赖的抽象超类中注入依赖。

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>

如何在application.xml中创建超类AbstractClassB的bean引用,以便我可以在所有子类bean创建中使用它?

3 个答案:

答案 0 :(得分:37)

您可以创建一个抽象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>

但是,为了清楚起见,并且为了让您的工具更好地帮助您,通常最好将其保留。

Section 3.7 of the Spring Manual讨论了bean定义继承。

答案 1 :(得分:3)

你可以使用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>

答案 2 :(得分:2)