通过指定重载方法参数JavaSpring获取接口的实现类

通过指定重载方法参数JavaSpring获取接口的实现类,java,spring,spring-mvc,factory-pattern,Java,Spring,Spring Mvc,Factory Pattern,我不确定有没有简单的方法来解释我的问题,所以我只想分享一些代码: 我有一个界面: 源可以是xml对象、json对象等 TARGET是我乐意在代码中使用的最后一个数据对象 public interface Populator<SOURCE, TARGET>{ void populate(SOURCE source, TARGET target); } 公共接口填充器{ 无效填充(源-源,目标-目标); } 我有许多实现类,以下是几个: public class XMLPop

我不确定有没有简单的方法来解释我的问题,所以我只想分享一些代码:

我有一个界面:

可以是xml对象、json对象等

TARGET是我乐意在代码中使用的最后一个数据对象

public interface Populator<SOURCE, TARGET>{
   void populate(SOURCE source, TARGET target);
}
公共接口填充器{
无效填充(源-源,目标-目标);
}
我有许多实现类,以下是几个:

public  class XMLPopulator<SOURCE extends XMLDocument, TARGET extends StadardisedData> implements Populator<SOURCE, TARGET>{

    @Override
    public void populate(SOURCE source, TARGET target){
       target.setName(source.getName);
    }
公共类XMLPopulator实现了Populator{
@凌驾
公共void填充(源、目标){
target.setName(source.getName);
}
还有一个实现类的示例:

public  class JSONPopulator<SOURCE extends JSONDocument, TARGET extends StadardisedData> implements Populator<SOURCE, TARGET>{

    @Override
    public void populate(SOURCE source, TARGET target){
       target.setName(source.getName);
    }
public类JSONPopulator实现了Populator{
@凌驾
公共void填充(源、目标){
target.setName(source.getName);
}
好的,上面允许我填充一个my Statardiseddata对象,它可以包含来自不同来源的数据,即xml和JSON,(只是给你一些我为什么这么做的背景:我有许多不同的API,它们都为我提供数据,但数据需要标准化,以便我在其他地方使用,这就是我使用这种populator方法的原因

现在在春天,我宣布这两个人口是这样的:

<bean id="jsonPopulator" class="com.company.populators.JSONPopulator">
<bean id="xmlPopulator" class="com.company.populators.XMLPopulator">

我需要的帮助是,我想根据可用值动态选择一个填充器。请参见以下内容:

public class MyClass{
   public static void main(String arg[]) { 
        List<Object> mixedValuesOfXMLandJSONDocuments = getDocuments();
        List<StadardisedData> stadardisedList = new ArrayList<StadardisedData>();
        for(Object document: mixedValuesOfXMLandJSONDocuments){
             StadardisedData stadardisedData = new StadardisedData();
            populator.populate(document, stadardisedData);//<- how would this populator be injected so the right populator gets used in Spring ?
            stadardisedList.add(stadardisedData);
        }
   }    
}
公共类MyClass{
公共静态void main(字符串arg[]){
列出XmlandJsonDocuments=getDocuments()的混合值;
List statardisedlist=new ArrayList();
for(对象文档:XmlandJsonDocuments的混合值){
stadardisedata stadardisedata=新的stadardisedata();

populator.populate(文档,statardiseddata);//看起来您可能只是使用Spring
Converter
接口和标准的
ConversionService
。谢谢Chrylis,但我不能使用转换器,因为转换器返回生成的新对象,我的StatardDisedata可能已经有一些值,但我正在使用填充器来丰富它。此外,它们在整个系统中都被使用不幸的是,无法将体系结构更改到这种程度……那么至少看看
ConversionService
是如何实现查找的,因为您似乎拥有相同的逻辑,只是在最后作用于现有对象。