You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Boot中动态筛选接口实现并返回默认实例?

解决方案

核心思路

借助Spring自动收集所有Base接口实现类的特性,通过Stream流筛选匹配实例;当无匹配项时,直接返回Base接口的默认实现,全程无需手动创建工厂类。

调整后的代码实现

修改SomeService中的筛选逻辑,将原有的orElseThrow()替换为orElse(),直接传入Base的匿名实现类(继承接口的默认方法):

@Service
@RequiredArgsConstructor
class SomeService {

    private final List<Base> baseList;

    public void callingClass(String str) {
        // 按accept规则筛选匹配实例,无匹配则返回Base默认实现
        Base base = baseList.stream()
                .filter(baseImpl -> baseImpl.accept(str))
                .findFirst()
                .orElse(new Base() {}); // 匿名类直接继承Base的默认方法

        // 后续可调用base.apply(object)执行业务逻辑
    }
}

关键说明

  1. Spring自动注入:由于A和B都标注了@Service注解,Spring会自动将这两个类的实例收集到List<Base>中,无需额外配置。
  2. 默认实现的兜底:匿名内部类new Base() {}会完全继承Base接口的apply和accept默认方法,完美满足"无匹配时返回Base默认逻辑"的需求。
  3. 可选优化:如果希望默认实现的accept方法永远不被筛选器匹配,可以显式重写该方法:
.orElse(new Base() {
    @Override
    public boolean accept(String str) {
        return false;
    }
});

内容的提问来源于stack exchange,提问作者Mohit Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:35:16