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

bob*_*bob 27 spring dependency-injection

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

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

class AbstractClassB{
    ..
    private yDao  daoy;
    public seyYdao() { ... }
}
Run Code Online (Sandbox Code Playgroud)

每次我实例化抽象类B时都需要传递超类依赖项(在我的项目中可以用100种方式进行子类化)

application.xml中的条目(spring上下文文件)

<bean id="aClass" class="com.mypro.A" 
    <property name="daox" ref="SomeXDaoClassRef" /> 
    <property name="daoy" ref="SomeYDaoClassRef"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

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

ska*_*man 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>
Run Code Online (Sandbox Code Playgroud)

严格来说,定义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>
Run Code Online (Sandbox Code Playgroud)

但是,为了清楚起见,并为您的工具提供更好的帮助您的机会,通常最好留下它.

Spring Manual的3.7节讨论了bean定义继承.