Внедрить весеннюю зависимость в абстрактный суперкласс - PullRequest
27 голосов
/ 21 ноября 2010

У меня есть требование ввести зависимость в абстрактный суперкласс, используя Spring Framework.

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

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

Мне нужно передавать зависимость суперкласса каждый раз, когда я создаю экземпляр абстрактного класса B (который может быть разделен на сотни классов в моем проекте)

запись в application.xml (весенний контекстный файл)

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

Как я могу просто создать ссылку на bean-компонент суперкласса AbstractClassB в application.xml, чтобы я мог использовать его при создании бина для всех подклассов?

Ответы [ 3 ]

37 голосов
/ 21 ноября 2010

Вы можете создать абстрактное определение компонента, а затем «подтипить» это определение, например,

<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 обсуждается наследование определения бина.

3 голосов
/ 21 ноября 2010

Вы можете использовать abstract флаг Spring, чтобы сообщить Spring, что класс абстрактный.Тогда все конкретные реализации могут просто пометить этот компонент как свой родительский компонент.

<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 голосов
/ 21 ноября 2010

Иметь абстрактный родительский компонент:

http://forum.springsource.org/showthread.php?t=55811

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...