コンテキスト春 - Builderのパターン
春4.1.7を利用するアプリケーションを使用して豆の注入。すべての設定はXMLファイル(注釈を使用しない)になっていますが、私はそのように保ちます(しかし、私がしなければならないことをやり遂げる方法を変えることができます)。私はビルダークラスが付属して新しいクラスを作成している
問題
。
今、この新しいクラスに他のBeanを挿入したいと思います。おそらく、それを行うためにlookupメソッドや同様のソリューションを使用して、呼び出し側Beanで新しいクラスのBuilderを使用してインスタンスを作成することができます。しかし、私はむしろ、この新しいクラスのインスタンスを呼び出し元Beanに注入し、ビルダを使用して作成します。これが私がそれをどうやって行うことができないのか分かりません。たとえば、これは抽象ファクトリーのように見えますが、実行時に抽象ファクトリにパラメータを渡すことはできません(ビルダーに渡されます)。
質問より明確にするためにいくつかのコードスニペット:
public final class Processor {
private final StatusEnum newStatus;
private final Long timeOut;
// I'd like this to be be injected by Spring through its setter (below)
private DaoBean daoInstance;
private Processor() {
this.newStatus = null;
this.timeOut = null;
}
private Processor(Builder builder) {
this.newStatus = builder.getNewStatus();
this.timeOut = builder.getTimeOut();
}
// To be called by Spring
public void setDaoInstance(DaoBean instance) {
this.daoInstance = instance;
}
public void updateDatabase() {
daoInstance.update(newStatus, timeOut);
}
// Builder class
public static final class Builder {
private StatusEnum newStatus;
private Long timeOut;
// lots of other fields
public Long getTimeOut() {
return this.timeOut;
}
public StatusEnum getNewStatus() {
return this.newStatus;
}
public Builder withTimeOut(Long timeOut) {
this.timeOut = timeOut;
return this;
}
public Builder withNewStatus(StatusEnum newStatus) {
this.newStatus = newStatus;
return this;
}
public Processor build() {
return new Processor(this);
}
}
}
を私は「プロセッサ」クラスに注入される「DaoBean」のインスタンスをしたいと思います。しかし、そうするためには、プロセッサーはBeanでなければならないか、そうでなければlookupメソッドのようなものを利用しなければなりません。私はプロセッサの春は維持しつつ、その発信者に注入することができBeanを作ることができる場合、私は疑問に思う、この代わりの
new Processor.Builder()
.withTimeOut(1000L)
.withNewStatus(StatusEnum.UPDATED)
.build()
.updateDatabase();
:私はプロセッサを使用したいところはどこでも一方で、私はこのような何かをしなければなりませんその不変性。 DaoBeanのインスタンスは、Springによってプロセッサに注入できます。そうすれば、配線コードとビジネスロジックを分離することができます。
ビルダーには2つ以上のフィールドがあり、それらのすべてを設定する必要はありません。これが、私が抽象的な工場が行く方法であると考えた理由です(プロセッサのインスタンスをさまざまな方法で構築する)。
申し訳ありませんが、私はまだあなたの実際の問題が何かを理解していません。いくつかのコードを投稿してください。例えばそのクラス?そうすれば、あなたはあなたが持っているものとあなたが望むものをよりよく理解するでしょう... –
質問が更新されました。 –