SpringBoot中如何将逐行索引式配置读取为List<String>
带索引下标的配置项注入为List的实现方法
Spring的底层属性绑定机制对配置前缀[索引]=值的写法是原生支持的,不需要依赖字符串拆分的实现,可直接通过以下几种方式将下标形式的配置收集为List
方式1:通过@ConfigurationProperties 绑定(最推荐)
这种方式适配所有带索引的配置写法,无额外字符串处理逻辑,可读性最高。
- 定义对应配置前缀的属性类,直接声明
List<String>类型的字段:
@Component @ConfigurationProperties(prefix = "spring.autoconfigure") public class AutoConfigExcludeProperties { // 声明List类型的属性,Spring会自动聚合所有匹配带[索引]下标的配置项 private List<String> exclude; // 补充getter、setter方法 public List<String> getExclude() { return exclude; } public void setExclude(List<String> exclude) { this.exclude = exclude; } }
- 在配置文件中直接使用每行单条、带下标的写法定义配置:
spring.autoconfigure.exclude[0]=com.vietnam.AAutoConfiguration spring.autoconfigure.exclude[1]=com.vietnam.BAutoConfiguration
- 其他业务Bean中直接注入上述配置类,即可拿到聚合完成的List集合。
这种写法和YAML格式下的缩进列表写法效果完全等价,哪怕配置项条数较多,也能保持极高的可读性与可维护性,不会像单行逗号分隔写法那样,因为漏写逗号、类名过长导致排查困难。
方式2:通过Binder手动绑定(无需定义配置类)
如果不想额外编写专属的配置类,仅需在某个业务Bean中临时获取聚合后的List值,可以直接使用Spring提供的Binder工具类,从Environment中完成绑定:
@Component public class BusinessBean { @Autowired private Environment environment; @PostConstruct public void init() { // 直接绑定对应配置路径为List类型,自动匹配所有带[索引]的配置项 List<String> excludeList = Binder.get(environment) .bind("spring.autoconfigure.exclude", Bindable.listOf(String.class)) .orElse(Collections.emptyList()); } }
该方式同样不需要做字符串拆分,直接复用Spring原生的属性聚合逻辑,支持任意连续下标写法的配置收集。
常见误区说明
@Value注解无法直接聚合下标形式的配置:@Value的解析逻辑是精确匹配单个键值对,不会自动聚合同前缀带索引的多个配置项为集合,因此不适合用来接收这类分条带索引的配置。如果使用@Value结合SpEL表达式硬写拆分逻辑,反而会增加不必要的代码复杂度。
内容的提问来源于stack exchange,提问作者uncle bob
相关产品推荐
相关产品推荐

