TL;DR:如何使用Spring IoC组合生成器模式?
我正在创建一个 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
}
}
但是,显然,这是一个糟糕的设计。随着项目变得更加复杂,我需要为每个可能的组合设置 mxn 类。
更好的设计是使用组合,根据需要的参数创建 DataBuilder。我怎样才能在不失去 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 中使用构建器模式,保持这种灵活性?