【问题标题】:Spring @Lookup method having String[] argument using full annotations configurationSpring @Lookup 方法具有使用完整注释配置的 String[] 参数
【发布时间】: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


    【解决方案1】:

    使用 @Autowired 注释将 DataCache 从构造函数移动到单独的设置器。 @Lookup 应该匹配构造函数参数的类型和参数计数,你不能使用部分定义。

    【讨论】:

      猜你喜欢
      • 2013-10-21
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 2018-09-20
      • 2015-05-28
      • 1970-01-01
      • 2014-03-19
      相关资源
      最近更新 更多