У меня возникла проблема с преобразованием моего шаблона состояния с использованием простой java для пружины DI, так как я новичок в весне.State Pattern с использованием Spring DI
Фактически я сделал проект с использованием шаблона состояния, но я принял подход, согласно которому каждое государство знает, что это последовательные состояния, а не класс контекста.
Класс контекста имеет поле «currentState», его тип IState, и он имеет метод setState (состояние IState).
У IState есть один метод geNext (контекст контекста).
И в контексте класса, который я сделал while (keepOn), keepOn истинно, и в ExitState он перестает обрабатывать, в этом цикле я вызываю currentState.goNext().
Каждое государство выполняет некоторые транзакции базы данных и вызовы webservice, и в зависимости от результата оно устанавливает следующее состояние с помощью context.setState (новый 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);}
}
Теперь я пытаюсь использовать пружинный DI аннотацию на основе, проблема я столкнулся в том, что контекст аннотированный «CurrentState поле» с @Autowired, но мне нужно пружинный контейнер сделать ту же логику, если я нахожусь в состоянии один, и «если утверждение» успешно введет состояние три «else if», впрысните состояние два, иначе вставьте exitState.
Если я использую @Qualifier (value = "stateOne"), он будет указывать только первое состояние, которое реализует интерфейс, но другие состояния, которые я задал в зависимости от ситуации, я не знаю, как указать его весной.
Также org.springframework.core.Ordered нужно указать заказы компонентов заранее, но я не знаю значений, которые я получу из базы данных или веб-сервиса заранее, его следует указывать во время выполнения.
Так можно заменить эту обычную java пружиной DI и как?
Заранее благодарим за помощь и извините за удлинение.