Вложение spring зависимости в абстрактном суперклассе
У меня есть требование ввести зависимость в абстрактном суперклассе с помощью spring framework.
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>
Как я могу просто создать ссылку bean суперкласса AbstractClassB в application.xml, чтобы я мог использовать его во всем подклассе bean создании?
Ответы
Ответ 1
Вы можете создать абстрактное определение 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>
Однако, для большей ясности и предоставления вашим инструментам больше шансов помочь вам, часто лучше оставить его.
В разделе 3.7 руководства Spring обсуждается наследование определения bean.
Ответ 2
Вы можете использовать абстрактный флаг 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>
Ответ 3
Есть абстрактный родительский bean:
http://forum.springsource.org/showthread.php?t=55811