加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:32:56 所属栏目:Java 来源:网络整理
导读:这是我想要实现的简化版本. 我有相同接口的多个实现.根据运行时的用户输入,我想选择正确的实现. 例如,假设我是一个名为Color的接口.有许多实现此接口的类,Red类,Blue类,Green类等. 在运行时,我需要根据用户输入选择实现.实现这一目标的一种方法是这样的 @Aut
这是我想要实现的简化版本.
我有相同接口的多个实现.根据运行时的用户输入,我想选择正确的实现.

例如,假设我是一个名为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;
}

}

但问题是,每次添加新实现时,我都必须更新选择实现的代码,这就是弹簧控制部分反转的全部目的.用弹簧做这件事的正确方法是什么?

解决方法

您可以自动装配相关接口的所有实现,然后根据接口提供的属性来决定使用.

@Autowired
private List<Color> colors;

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读