TL; DR:如何在Spring IoC中使用组合 Builder模式?
我正在创建一个Spring项目,根据某些字段的分布参数填充表格(即50%的记录必须是A类,40%是B类,10%是C类;对于每种类型,50%必须属于亚型1,亚型2的20%,亚型3的10%等)。
为了加快记录创建,我有一个RecordFactory来计算这些参数的分布并返回RecordBuilder列表。每个RecordBuilder都将Callable接口扩展为同时处理和返回记录:
到目前为止,我只考虑类型A,B和C是创建TypeABuilder,TypeBBuilder和TypeCBuilder,它们为每种类型返回不同的ProcessorFactory实现:
public class RecordFactory {
@Inject
private transient TypeABuilder aBuilder;
@Inject
private transient TypeBBuilder bBuilder;
@Inject
private transient TypeCBuilder cBuilder;
public List<DataBuilder> getBuilders() {
// calculates distribution for each type and add the builders accordingly
}
}
但是,显然,这是一个糟糕的设计。随着项目变得越来越复杂,我需要为每种可能的组合设置m x n个类。
更好的设计是使用合成,根据所需的参数创建DataBuilders。如何在不失去Spring IoC优势的情况下实现这一目标?
更新
我改变了RecordFactory构建ProcessorFactory的方式。我有一个Builder对象,而不是单独的Builder对象,它使用Builder模式根据我的需要创建一个ProcessorFactory:
@Component
@Scope("prototype")
public class Builder {
private Type type;
private Subtype subtype;
public Builder setType(Type type) {`
this.type = type;
return this;
}
public setSubtype(Subtype subtype) {
this.subtype = subtype;
return this;
}
public ProcessorFactory createFactory() {
return new ProcessorFactoryImpl(this);
}
}
public class ProcessorFactoryImpl {
@Inject
private transient TypeProcessor typeProcessor;
@Inject
private transient SubtypeProcessor subtypeProcessor;
public ProcessorFactoryImpl(Builder builder) {
typeProcessor.setType(builder.getType());
processors.add(typeProcessor);
subtypeProcessor.setSubtype(builder.getSubtype());
processors.add(subTypeProcessor);
}
}
现在我的问题是:当我在Builder中创建一个新的ProcessorFactoryImpl时,我无法注入我的处理器。如何在Spring中使用构建器模式,保持这种灵活性?