2011-03-07 5 views
0

У меня есть две абстрактных классовпроблемы с инъекционным абстрактным классом весной

class abstract A { 
//some methods . 
} 

class abstract B extends A { 
private C c ; 
//other methods 
} 

Spring файл конфигурация:

<bean id="b" class="B" abstract="true"> 
    <property name="c" ref="C" /> //I have reference for C else where 
</bean> 

Когда я запускаю программу, класс с не получает инъекционные. Он приходит как null. Я что-то упускаю ?

+2

как вы создаете экземпляр B? –

ответ

4

abstract=true означает, что спецификация bean-компонента является «шаблоном» для других расширений для bean-объявлений, это не означает, что класс является абстрактным. Я подозреваю, что bean с id b не создается, поскольку это шаблон/абстрактное определение. Удалите abstract=true и сделайте B конкретным типом, и он должен работать.

Документация здесь: http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-child-bean-definitions

0

Вы не показывают Присваиватель C в абстрактном классе B. Вы должны использовать либо настройки или инъекции конструктора. Код как опубликованный не может работать.

Вы также должны указать B как родительский компонент для C; аналогично A для B.

+0

C имеет сеттеры. Я использую инъекцию сеттера. – vinoth

0

Хотя использование 'abstract = "true"' не означает, что спецификация компонента предназначена для абстрактного класса, она по-прежнему требуется для определения абстрактного класса, так что предварительная реализация не пытается в этом классе (что не удастся для абстрактного класса). Это указано в примечании ниже раздела, в котором указанная ссылка указывает на (http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-child-bean-definitions). Если бы это была ситуация, когда суперкласс не был абстрактным классом, тогда да, 'abstract = "true"' не следует использовать.

Смежные вопросы