【发布时间】:2020-06-26 21:55:05
【问题描述】:
我有一个 JavaFX 应用程序,我想使用 Lookup 方法在 Singleton 范围 bean 中注入原型范围 bean,并且我的所有配置都使用 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: 创建具有名称的 bean 时出错 'firstCaseDateX_NewCasesPerPopulationY_SeriesDataAdapter' 定义在 文件 [D:\JAVA\workspaces\covid-19\covid19-unified-start-time-line-chart\target\classes\com\othmen\test\covid19\seriesdatasource\FirstCaseDateX_NewCasesPerPopulationY_SeriesDataAdapter.class]: 无法解析匹配的构造函数(提示:指定索引/类型/名称 简单参数的参数以避免类型歧义)
我认为他无法注入参数 selectedCountries,因为它是一个简单的类型 (String[]),但我不知道如何像他想要的那样给他更多信息(名称或索引)。
我想我可以通过为我的 String[] 参数创建一个自定义类作为包装器或通过为我的 String[] 定义一个 FactoryBean 来解决这个问题,这将允许我给他一个限定符并在原型中添加 @Qualifier constrcutor,但有没有更简单的方法给他一个 Qualifier ?
【问题讨论】:
标签: spring dependency-injection spring-annotations