Метод Spring @Lookup с аргументом String [], использующий полную конфигурацию аннотаций - PullRequest
0 голосов
/ 15 марта 2020

У меня есть приложение JavaFX, и я хочу внедрить прототип scopped bean в синглтон scopped bean, используя метод Lookup, и вся моя конфигурация использует javax.inject API

@Named
@Singleton
public abstract class DataModel {

    public ObservableList<Series<Number, Number>> observableList;

    public DataModel() {
        observableList = FXCollections.observableArrayList();
    }

    public void refresh(String[] selectedCountries) {
        observableList.clear();
        SeriesDataAdater seriesDataAdapter = getPopulationFirstCaseRelativeSeriesDataAdapter(selectedCountries);
        observableList.addAll(seriesDataAdapter.getSeriesList());
    }


    @Lookup()
    public abstract FirstCaseDateX_NewCasesPerPopulationY_SeriesDataAdapter getPopulationFirstCaseRelativeSeriesDataAdapter(String[] selectedCountries);
}


@Named
@Scope("prototype")
public class FirstCaseDateX_NewCasesPerPopulationY_SeriesDataAdapter extends SeriesDataAdater{

    @Inject
    public FirstCaseDateX_NewCasesPerPopulationY_SeriesDataAdapter(String[] selectedCountries, DataCache cache) {
        super(cache, selectedCountries);
    }

    @Override
    public List<Series<Number, Number>> getSeriesList() {
        ....
    }

    @Override
    public Series<Number, Number> getSeries(String country) {
        ....
    }

}

У меня есть это исключение :

Причина: org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем 'firstCaseDateX_NewCasesPerPopulationY_SeriesDataAdapter', определенного в файле [D: \ JAVA \ workspaces \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 \ covid-19 start-time-line-chart \ target \ classes \ com \ othmen \ test \ covid19 \ seriesdatasource \ FirstCaseDateX_NewCasesPerPopulationY_SeriesDataAdapter.class]: не удалось разрешить соответствующий конструктор (подсказка: укажите аргументы index / type / name для простых параметров, чтобы избежать неоднозначности типов)

Я думаю, что он не может ввести аргумент selectedCountries, потому что это простой тип (String []), но я не знаю, как дать ему больше информации (имя или индекс), как он хочет.

я думаю, что смогу решить эту проблему, создав собственный класс в качестве оболочки для моего параметра String [] или определив FactoryBean для моего String [], что позволит мне дать ему квалификатор и добавить @Qualifier в прототипе constrcutor, но есть ли более простой способ дать ему квалификатор?

...