From 0867dfca33168d9f3871d3d1a2bab6b14f5093f6 Mon Sep 17 00:00:00 2001 From: Sam Brannen <104798+sbrannen@users.noreply.github.com> Date: Wed, 7 May 2025 14:25:13 +0200 Subject: [PATCH] Introduce CompositePropertySource constructor that accepts Iterable This commit introduces a new constructor for CompositePropertySource that accepts a `String name` and an Iterable>, which allows a CompositePropertySource to be constructed from existing property sources, such as an instance of MutablePropertySources. Closes gh-34862 --- .../core/env/CompositePropertySource.java | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/core/env/CompositePropertySource.java b/spring-core/src/main/java/org/springframework/core/env/CompositePropertySource.java index 5fe8115842..3371737b0d 100644 --- a/spring-core/src/main/java/org/springframework/core/env/CompositePropertySource.java +++ b/spring-core/src/main/java/org/springframework/core/env/CompositePropertySource.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2024 the original author or authors. + * Copyright 2002-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,6 +39,7 @@ import org.springframework.util.StringUtils; * @author Chris Beams * @author Juergen Hoeller * @author Phillip Webb + * @author Sam Brannen * @since 3.1.1 */ public class CompositePropertySource extends EnumerablePropertySource { @@ -47,13 +48,35 @@ public class CompositePropertySource extends EnumerablePropertySource { /** - * Create a new {@code CompositePropertySource}. - * @param name the name of the property source + * Create a new empty {@code CompositePropertySource} with the given name. + * @param name the name of the composite property source + * @see #CompositePropertySource(String, Iterable) + * @see #addPropertySource(PropertySource) + * @see #addFirstPropertySource(PropertySource) */ public CompositePropertySource(String name) { super(name); } + /** + * Create a new {@code CompositePropertySource} with the given name and + * property sources supplied as an {@link Iterable} or {@link PropertySources} + * implementation, preserving the original order of the property sources. + * @param name the name of the composite property source + * @param propertySources the initial set of {@link PropertySource} instances + * @since 6.2.7 + * @see PropertySources + * @see MutablePropertySources + * @see #addPropertySource(PropertySource) + * @see #addFirstPropertySource(PropertySource) + */ + public CompositePropertySource(String name, Iterable> propertySources) { + this(name); + for (PropertySource propertySource : propertySources) { + this.propertySources.add(propertySource); + } + } + @Override @Nullable