Strategy pattern with spring beans

后端 未结 2 1737
灰色年华
灰色年华 2020-12-04 10:00

Say I\'m using spring, I have the following strategies...

Interface

public interface MealStrategy {
    cook(Meat meat);
}

First st

2条回答
  •  情话喂你
    2020-12-04 10:36

    I would use simple Dependency Injection.

    @Component("burger")
    public class BurgerStrategy implements MealStrategy { ... }
    
    @Component("sausage")
    public class SausageStrategy implements MealStrategy { ... }
    

    Controller

    Option A:

    @Resource(name = "burger")
    MealStrategy burger;
    
    @Resource(name = "sausage")
    MealStrategy sausage;
    
    @RequestMapping(method = RequestMethod.POST)
    public @ResponseBody Something makeMeal(Meat meat) {
        burger.cookMeal(meat);
    }
    

    Option B:

    @Autowired
    BeanFactory bf;
    
    @RequestMapping(method = RequestMethod.POST)
    public @ResponseBody Something makeMeal(Meat meat) {
        bf.getBean("burger", MealStrategy.class).cookMeal(meat);
    }
    

    You can choose to create JSR-330 qualifiers instead of textual names to catch misspellings during compile time.

    See also:

    How to efficiently implement a strategy pattern with spring?

    @Resource vs @Autowired

提交回复
热议问题