Spring でリクエストスコープの Bean をシングルトン Bean に注入できることはわかっているので、私がやろうとしていることはうまくいくと思います。余分な不要なクラスをあまり使わずに、より簡潔に表現する方法があるかどうか疑問に思っています。定義。Spring アノテーションは初めてなので、知らないアノテーションがあるかもしれません。
アプリケーションで異なるシングルトンSpring Beanとしておそらく100回拡張される抽象クラスがあります。例として、次のクラス定義を取り上げます。
/** The abstract class with a field that needs to be request-specific **/
public abstract class AbstractSingletonBean {
private SampleState state;
public SampleState getState() { return state; }
public void setState(SampleState state) { this.state = state; }
// Other fields that are just singleton here
}
そして、Bean 定義の 1 つがどのように見えるかの例:
@Component
public class SampleSingletonBean extends AbstractSingletonBean {
@Resource(name="sampleState")
public void setState(SampleState state) { super.setState(state); }
}
もちろん、 という Bean が必要sampleState
です。そのため、フィールドを定義する基本クラスSampleState
と、リクエスト スコープの Bean 定義の 2 つのクラスを作成する必要があります。これは、各拡張機能がAbstractSingletonBean
状態フィールドの独自のリクエスト スコープのインスタンスを必要とするためです。
ここに基本クラスがあります:
public class SampleState {
private String fieldOne;
public String getFieldOne() { return fieldOne }
public void setFieldOne() { this.fieldOne = fieldOne }
}
そして、これがこのばかげた Bean の定義です。
@Component ("sampleState")
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class SampleStateBean extends SampleState {}
気になるのは、 の拡張機能が 100 個ある場合、リクエスト スコープにするためのボイラープレート コードだけAbstractSingletonBean
で の拡張機能が 100 個必要になることです。拡張機能をSampleStateBean
オーバーライドして、その場で新しいリクエスト スコープ Bean を作成し、ここに注入する必要があることを示す方法はありますか? だから私は次のようになります:setState()
AbstractSingletonBean
SampleSingletonBean
@Component
public class SampleSingletonBean extends AbstractSingletonBean {
@Resource
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public void setState(SampleState state) { super.setState(state); }
}
もちろん@Resource
、既に存在する Bean を参照する必要があるため、これは機能しません。SampleState
すべての Beanに新しいクラスを作成せずにこれを達成するための別の注釈はありますか?