gpt4 book ai didi

java - 基于运行时条件的 Spring 开关实现

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:23:15 24 4
gpt4 key购买 nike

这是我要实现的目标的简化版本。我有同一个接口(interface)的多个实现。基于运行时的用户输入,我想选择正确的实现。

例如,假设我有一个名为 Color 的接口(interface)。实现这个接口(interface)的类有很多,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;
}

}

但这样做的问题是,每次添加新的实现时,我都必须更新选择实现的代码,这违背了 spring 控制反转部分的全部目的。使用 spring 执行此操作的正确方法是什么?

最佳答案

您可以 Autowiring 相关接口(interface)的所有实现,然后根据接口(interface)提供的属性决定使用哪个接口(interface)。

@Autowired
private List<Color> colors;

public void doSomething(String input) {
colors.stream().filter(c -> c.getName().contains(input)).findFirst().ifPresent(c -> {
// something
}
}

这样也没有那么神奇,更符合OO原则。依赖注入(inject)最初是为了连接事物,而不是为了在运行时动态切换。

关于java - 基于运行时条件的 Spring 开关实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35929872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com