春豆的策略模式
2022-09-01 10:05:42
假设我正在使用弹簧,我有以下策略...
接口
public interface MealStrategy {
cook(Meat meat);
}
第一个策略
@Component
public class BurgerStrategy implements
MealStrategy {
@Autowired CookerDao cookeryDao;
@Override
public void cook(Meat meat) {
cookeryDao.getBurger(meat);
}
}
下一步策略...
@Component
public class SausageStrategy implements
MealStrategy {
@Autowired CookerDao cookeryDao;
@Override
public cook(Meat meat) {
return cookeryDao.getSausage(meat);
}
}
上下文。。。
@Component
@Scope("prototype")
public class MealContext {
private MealStrategy mealStrategy;
public void setMealStrategy(MealStrategy strategy) {
this.strategy = strategy;
}
public void cookMeal(Meat meat) {
mealStrategy.cook;
}
}
现在假设此上下文是通过mvc控制器访问的,例如...
@Autowired
private MealContext mealContext;
@RequestMapping(method = RequestMethod.POST)
public @ResponseBody Something makeMeal(Meat meat) {
mealContext.setMealStrategy(new BurgerStrategy())
mealContext.cookMeal(meat);
}
上下文是否应为组件?当我这样做时,我得到一个错误,说loadOnStartup a有一个非UniqueBean的策略,正如你所期望的那样。是所有的bean都需要像上面那样的组件,还是我的注释不正确?
我最大的疑问是,你能在Spring MVC应用程序中使用这样的上下文吗?我使用@Scope(原型)的问题还在于,这意味着策略中的烹饪道调用返回一个空指针,因为道不会被注入。
我如何使用弹簧实现上述模式,同时又是线程安全的?我所尝试的甚至有可能吗?