TL;DR: Spring IoC で Builder パターンの構成を使用するにはどうすればよいですか?
一部のフィールドの分布パラメーターに基づいてテーブルにデータを入力する Spring プロジェクトを作成しています (つまり、レコードの 50% がタイプ A、タイプ B の 40%、タイプ C の 10% である必要があります。タイプごとに 50% がサブタイプでなければなりません)。 1、サブタイプ 2 の 20%、サブタイプ 3 の 10% など)。
レコードの作成を高速化するために、これらのパラメーターの分布を計算し、RecordBuilder のリストを返す RecordFactory があります。各 RecordBuilder は Callable インターフェースを拡張して、レコードを同時に処理して返すようにします。
これまでに行ったことは、タイプ A、B、および C だけを考慮して、タイプごとに異なる ProcessorFactory 実装を返す TypeABuilder、TypeBBuilder、および TypeCBuilder を作成することでした。
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 IC の利点を失わずにこれを行うにはどうすればよいですか?
アップデート:
RecordFactory が ProcessorFactory を構築する方法を変更しました。個別の Builder オブジェクトの代わりに、必要に応じて Builder パターンを使用して ProcessorFactory を作成する 1 つの Builder オブジェクトがあります。
@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);
}
}
今私の問題は次のとおりです。ビルダーで新しい ProcessorFactoryImpl を作成すると、プロセッサを挿入できません。そのような柔軟性を維持しながら、Spring でビルダー パターンを使用するにはどうすればよいですか?