I have an Strategy interface, that is implemented by StrategyA and StrategyB, both of them are defined as @Component's and they have an @Autowired attribute as well, how can I do to obtain an instance of one of them based on an String value?
This is my Controller's action, that should perform the strategy:
@RequestMapping("/blabla")
public void perform (@RequestParam String strategyName) {
Strategy strategy = (Strategy) /* Get the concrete Strategy based on strategyName */;
strategy.doStuff ();
}
Thanks!
You can look it up programmatically:
private @Autowired BeanFactory beanFactory;
@RequestMapping("/blabla")
public void perform (@RequestParam String strategyName) {
Strategy strategy = beanFactory.getBean(strategyName, Strategy.class);
strategy.doStuff();
}
You could do it a fancier way using a custom WebArgumentResolver
, but that's a lot more trouble than it's worth.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With