私は春が初めてなので、プレーンJavaを使用して状態パターンをSpring DIに変換する際に問題に直面しています。
実際には状態パターンを使ってプロジェクトを作成しましたが、すべての状態がコンテキスト クラスではなく、連続した状態を認識しているというアプローチを取りました。
コンテキスト クラスにはフィールド「currentState」があり、その型は IState であり、メソッド setState(IState state) があります。
IState には 1 つのメソッド geNext(Context context) があります。
そして、コンテキスト クラスで while(keepOn) keepOn を true にし、ExitState で false になって処理を停止し、このループで currentState.goNext() を呼び出します。
各状態はいくつかのデータベース トランザクションと Web サービスの呼び出しを行い、結果に応じて context.setState(new StateFour()) を使用して次の状態を設定します。
最初の状態は、コンテキストの作成後にクライアントによって設定されます。
コードサンプル:
public interface IState{public void goNext(Context context);}
public class StateOne implements IState{
public void goNext(Context context){
//do some logic
if(user.getTitle.equals("manager"){context.setState(new StateThree());}
else if(user.getTitle.equals("teamLead"){context.setState(new StateTwo());}
else{context.setState(new ExitState());}
}
}
public class Context{
private boolean keepOn = true;
private IState currentState;
public void setState(IState state){
currentState = state;
}
while(keepOn){currentState.goNext(this);}
}
今、私はSpring DI注釈ベースを使用しようとしています.私が直面している問題は、コンテキストが@Autowiredで「currentStateフィールド」に注釈を付けることですが、私が状態1にあり、「if statement" success 状態 3 を注入する "else if" 状態 2 を注入するそれ以外の場合は exitState を注入します。
@Qualifier(value ="stateOne") を使用すると、インターフェイスを実装する最初の状態のみが指定されますが、状況に応じて設定した他の状態は春に指定する方法がわかりません。
また、org.springframework.core.Ordered は事前に Bean の順序を指定する必要がありますが、事前にデータベースまたは Web サービスから受け取る値がわからないため、実行時に指定する必要があります。
このプレーンなJavaをSpring DIに置き換えることは可能ですか?
ご協力いただきありがとうございます。長くなって申し訳ありません。