2011-01-25 103 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