因为我是春天的新手,所以我在使用普通java转换我的状态模式时遇到了问题.
实际上我使用状态模式创建了一个项目,但我采用的方法是每个状态都知道连续状态而不是上下文类.
上下文类有一个字段"currentState",它的类型是IState,它有方法setState(IState状态).
IState有一个方法geNext(Context context).
在上下文类中我做了一段时间(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);}
}
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试使用基于Spring DI注释的问题,我面临的问题是上下文将使用@Autowired注释"currentState字段"但是如果我处于状态1并且"如果我处于"状态,我需要弹簧容器执行相同的逻辑声明"成功注入状态三"否则如果"注入状态二,否则注入exitState.
如果我使用@Qualifier(value ="stateOne"),它将只指定实现接口的第一个状态,但是我根据情况设置的其他状态我不知道如何在spring中指定它.
另外org.springframework.core.Ordered需要事先指定bean的顺序,但我不知道我将提前从数据库或webservice接收的值,它应该在运行时指定.
那么有可能用spring DI替换这个普通的java以及如何?
提前感谢您的任何帮助,并抱歉延长.
您应该使用ApplicationContext。下面的例子:
// Inject application context into your bean
@Autowired
ApplicationContext applicationContext;
// Get bean from the context (equivalent to @Autowired)
applicationContext.getBean(StateThree.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1219 次 |
| 最近记录: |