2011-01-25 102 views
3

我有一個戰略接口,由StrategyA實施StrategyB,兩者都被定義爲@Component的,他們有一個@Autowired屬性,我怎樣才能根據字符串值來獲取其中一個實例?策略模式和依賴注入

這是我的控制器的動作,應該執行的策略:

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

謝謝!

回答

11

你可以看看它編程:

private @Autowired BeanFactory beanFactory; 

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

你可以做到這一點使用自定義WebArgumentResolver票友的方式,但是這是一個很大的麻煩比它的價值。

+0

是的,就是這樣!非常感謝! – 2011-01-25 13:45:08