春を使用しているとします。次の戦略があります...
インターフェース
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 というエラーが表示され、予想どおり、戦略である可能性のある nonUniqueBean があります。すべての Bean が上記のようなコンポーネントである必要がありますか、それとも私の注釈が間違っていますか?
私の最大の質問は、Spring MVC アプリでそのようなコンテキストを使用できるかということです。@Scope(prototype) を使用する際に私が抱えている問題も、Dao が注入されないため、戦略の cookeryDao 呼び出しが null ポインターを返すことです。
春を使用して上記のパターンを実装し、スレッドセーフにする方法を教えてください。私がしようとしていることは可能ですか?