Шаблон стратегии и внедрение зависимостей весной - PullRequest
3 голосов
/ 25 января 2011

У меня есть интерфейс Strategy , который реализуется StrategyA и StrategyB , оба они определены как @ Component ' s и у них также есть атрибут @ Autowired , как я могу получить экземпляр одного из них на основе строкового значения?

Это действие моего Контроллера, которое должно выполнять стратегию:

@RequestMapping("/blabla")
public void perform (@RequestParam String strategyName) {
    Strategy strategy = (Strategy) /* Get the concrete Strategy based on strategyName */;
    strategy.doStuff ();
}

Спасибо!

1 Ответ

12 голосов
/ 25 января 2011

Вы можете посмотреть это программно:

private @Autowired BeanFactory beanFactory;

@RequestMapping("/blabla")
public void perform (@RequestParam String strategyName) {
    Strategy strategy = beanFactory.getBean(strategyName, Strategy.class);
    strategy.doStuff();
}

Вы можете сделать это более изящным способом, используя пользовательский WebArgumentResolver, но это намного больше проблем, чем оно того стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...