У меня есть приложение 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, но есть ли более простой способ дать ему квалификатор?