通过指定重载方法参数JavaSpring获取接口的实现类
我不确定有没有简单的方法来解释我的问题,所以我只想分享一些代码: 我有一个界面: 源可以是xml对象、json对象等 TARGET是我乐意在代码中使用的最后一个数据对象通过指定重载方法参数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
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);//看起来您可能只是使用SpringConverter
接口和标准的ConversionService
。谢谢Chrylis,但我不能使用转换器,因为转换器返回生成的新对象,我的StatardDisedata可能已经有一些值,但我正在使用填充器来丰富它。此外,它们在整个系统中都被使用不幸的是,无法将体系结构更改到这种程度……那么至少看看ConversionService
是如何实现查找的,因为您似乎拥有相同的逻辑,只是在最后作用于现有对象。