我需要使用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创建中使用它?
答案 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)
有一个抽象的父bean: