这是我试图实现的简化版本。 我有相同接口的多个实现。基于运行时的用户输入,我想选择正确的实现。基于运行时条件的弹簧开关实现
例如,假设我有一个名为Color的接口。有很多类实现这个接口,Red类,Blue类,Green类等等。
在运行时我需要根据用户输入选择实现。实现这一目标的一个方法是这样的
@Autowired
@Qualifier("Red")
private Color redColor;
@Autowired
@Qualifier("Green")
private Color greenColor;
private Color getColorImplementation()
{
if(userInput=="red")
{
return redColor;
}
else if(userInput=="green")
{
return greenColor;
}
else
{
return null;
}
}
但这样做的问题是,每次一个新的实现添加,我将不得不更新采实现,它击败反转的全部目的的代码春天的控制部分。用春天做这件事的正确方法是什么?
非常好的解决方案。你甚至可以改进它,如果你将声明'Map colors'而不是'List'。然后,应该用@Component(“colorName”)声明新的颜色。在这种情况下,您甚至可以为一种颜色创建多个同义词名称,并且不需要让“Color”类知道有关颜色分辨率的任何内容。 –
@Ken:我认为你的评论应该是答案的一部分。我最终按照您的建议使用了地图,然后通过在@Component(“BeanName”)中声明的名称从地图中获取项目。完美工作! – developer747
@ developer747我很乐意提供帮助。主要思想 - 根据基本类型自动调整bean的列表,由zapl建议。其他它只是细节。 –