Java 如何使用带弹簧注入的生成器模式?
TL;DR:我如何在SpringIOC中使用构图生成器模式 我正在创建一个Spring项目,该项目根据某些字段的分布参数填充一个表(即50%的记录必须为a类型、40%的B类型、10%的C类型;对于每种类型,50%的记录必须为子类型1、20%的子类型2、10%的子类型3等) 为了加快记录创建速度,我有一个RecordFactory,它计算这些参数的分布并返回RecordBuilder列表。每个RecordBuilder都扩展了可调用接口以同时处理和返回记录: 到目前为止,考虑到类型A、B和C,我所做的是创建一个TypeABuilder、TypeBBuilder和TypeCBuilder,它为每种类型返回不同的ProcessorFactory实现:Java 如何使用带弹簧注入的生成器模式?,java,spring,builder,composition,spring-ioc,Java,Spring,Builder,Composition,Spring Ioc,TL;DR:我如何在SpringIOC中使用构图生成器模式 我正在创建一个Spring项目,该项目根据某些字段的分布参数填充一个表(即50%的记录必须为a类型、40%的B类型、10%的C类型;对于每种类型,50%的记录必须为子类型1、20%的子类型2、10%的子类型3等) 为了加快记录创建速度,我有一个RecordFactory,它计算这些参数的分布并返回RecordBuilder列表。每个RecordBuilder都扩展了可调用接口以同时处理和返回记录: 到目前为止,考虑到类型A、B和C,我
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
}
}
现在我的问题是:当我在构建器中创建一个新的ProcessorFactoryImpl时,我无法注入处理器。如何在Spring中使用builder模式,保持这种灵活性?您是否考虑过Spring的AbstractFactory?我不太了解您的场景,但更好的方法是使用AbstractFactory。@Xstian是的,但我是否仍然需要m x n工厂实现来创建数据生成器?您必须拥有所有实现,但您可以通过
查找方法和AbstractFactory来使用它,以避免失去spring的好处。
@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);
}
}