У меня есть абстрактный класс:Spring Autowire Аннотация на абстрактный класс: Нет уникальный боб не определен
@Component
public abstract class BaseReport {
public void export() {
...
}
и куча классов, которые расширяют его, и переопределить метод экспорта() (или нет) ,
@Component
public final class Report1 extends BaseReport
@Component
public final class Report2 extends BaseReport
Большинство моих тестов autowire конкретные классы, которые расширяют BaseReport, без проблем:
public class Report1Test extends BaseTest {
@Autowired
Report1 _report;
public class Report2Test extends BaseTest {
@Autowired
Report2 _report;
Это прекрасно работает для автоматического связывания всех классов, которые простираются BaseReport. Но мне также необходимо автообновить абстрактный класс BaseReport, чтобы протестировать метод export().
public class BaseReportTest extends BaseTest {
@Autowired
BaseReport _report;
Когда я пытаюсь запустить его я получаю печально:
Нет Уникальный боб типа BaseReport не определен: ожидаемый единственный соответствующий компонент, но нашел 2 [Report1, Report2].
Я попытался использовать @Qualifier, но проблема с @Qualifier заключается в том, что (как я понимаю) вы используете его, чтобы сообщить Spring, какой класс - реализует интерфейс или расширяет абстрактный класс - вы хотите использовать , Но это не мое дело. Я хочу использовать абстрактный класс.
Я также попытался с помощью @Resource, как это:
public class BaseReportTest extends BaseTest {
@Resource(name = "baseReport")
BaseReport _report;
Spring говорит мне, что нет боба с этим именем. :(
Как я могу это сделать?
Приветствия.
Вы абсолютно правы. Прочитав ваш ответ, я сделал еще один взгляд и уверен, я немного неправильно понял проблему. Все конкретные классы расширяют BaseReport и реализуют метод export(), но * метод export() не исходит из BaseReport, а скорее интерфейс IReport, который реализует BaseReport и все конкретные отчеты. Так что нет необходимости тестировать метод export() BaseReport, потому что у него его нет! Поскольку я уже протестировал каждый конкретный класс 'export() метод, моя работа выполнена. Большое спасибо за помощь. –