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

如何重构Spring Boot中多个相似的配置类?

如何重构仅常量不同的Spring配置类?

当然可以重构,这种重复代码的场景最适合用抽象基类提取通用逻辑的方式,既保留原有配置类的结构,又能消除重复。下面是具体实现方案:

方案:抽象基类+子类继承

先把两个配置类里的通用逻辑抽成抽象基类,将可变的CONFIG_STRING通过抽象方法暴露给子类实现:

抽象基类(处理通用Bean逻辑)

public abstract class BaseConfig {
    // 由子类提供具体的配置标识字符串
    protected abstract String getConfigString();

    // 用SpEL动态拼接Bean名称
    @Bean(name = "#{'first' + getConfigString()}")
    public First first() {
        // 这里写原来两个配置类里first()的通用逻辑
        ...
    }

    @Bean(name = "#{'second' + getConfigString()}")
    public Second second() {
        // 这里写原来两个配置类里second()的通用逻辑
        ...
    }
}

子类(仅指定唯一常量)

@Configuration
public class ConfigA extends BaseConfig {
    private static final String CONFIG_STRING = "configA";

    @Override
    protected String getConfigString() {
        return CONFIG_STRING;
    }
}

@Configuration
public class ConfigB extends BaseConfig {
    private static final String CONFIG_STRING = "configB";

    @Override
    protected String getConfigString() {
        return CONFIG_STRING;
    }
}

关键细节说明

  • 这里用Spring的SpEL表达式#{'first' + getConfigString()}来动态生成Bean名称,因为父类无法直接引用子类的静态常量,通过调用子类实现的抽象方法可以正确获取到各自的配置字符串。
  • 后续如果新增类似的配置类,只需要继承BaseConfig并实现getConfigString()方法即可,完全不用重复写Bean的创建逻辑。
  • Spring对@Configuration类的继承是完全支持的,子类依然会被当作配置类正常扫描和处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:13:30