CompositePropertySource extends EnumerablePropertySource now
Issue: SPR-12292
This commit is contained in:
parent
fd69ee541e
commit
9d969587ab
|
|
@ -17,21 +17,29 @@
|
|||
package org.springframework.core.env;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* Composite {@link PropertySource} implementation that iterates over a set of
|
||||
* {@link PropertySource} instances. Necessary in cases where multiple property sources
|
||||
* share the same name, e.g. when multiple values are supplied to {@code @PropertySource}.
|
||||
*
|
||||
* <p>As of Spring 4.1.2, this class extends {@link EnumerablePropertySource} instead
|
||||
* of plain {@link PropertySource}, exposing {@link #getPropertyNames()} based on the
|
||||
* accumulated property names from all contained sources (as far as possible).
|
||||
*
|
||||
* @author Chris Beams
|
||||
* @author Juergen Hoeller
|
||||
* @author Phillip Webb
|
||||
* @since 3.1.1
|
||||
*/
|
||||
public class CompositePropertySource extends PropertySource<Object> {
|
||||
public class CompositePropertySource extends EnumerablePropertySource<Object> {
|
||||
|
||||
private final Set<PropertySource<?>> propertySources = new LinkedHashSet<PropertySource<?>>();
|
||||
|
||||
|
|
@ -56,6 +64,28 @@ public class CompositePropertySource extends PropertySource<Object> {
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsProperty(String name) {
|
||||
for (PropertySource<?> propertySource : this.propertySources) {
|
||||
if (propertySource.containsProperty(name)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getPropertyNames() {
|
||||
Set<String> names = new LinkedHashSet<String>();
|
||||
for (PropertySource<?> propertySource : this.propertySources) {
|
||||
if (propertySource instanceof EnumerablePropertySource) {
|
||||
names.addAll(Arrays.asList(((EnumerablePropertySource<?>) propertySource).getPropertyNames()));
|
||||
}
|
||||
}
|
||||
return StringUtils.toStringArray(names);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add the given {@link PropertySource} to the end of the chain.
|
||||
* @param propertySource the PropertySource to add
|
||||
|
|
@ -84,6 +114,7 @@ public class CompositePropertySource extends PropertySource<Object> {
|
|||
return this.propertySources;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("%s [name='%s', propertySources=%s]",
|
||||
|
|
|
|||
|
|
@ -47,6 +47,11 @@ public abstract class EnumerablePropertySource<T> extends PropertySource<T> {
|
|||
super(name, source);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
protected EnumerablePropertySource(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return whether this {@code PropertySource} contains a property with the given name.
|
||||
|
|
|
|||
|
|
@ -75,10 +75,10 @@ public abstract class PropertySource<T> {
|
|||
}
|
||||
|
||||
/**
|
||||
* Create a new {@code PropertySource} with the given name and with a new {@code Object}
|
||||
* instance as the underlying source.
|
||||
* <p>Often useful in testing scenarios when creating anonymous implementations that
|
||||
* never query an actual source but rather return hard-coded values.
|
||||
* Create a new {@code PropertySource} with the given name and with a new
|
||||
* {@code Object} instance as the underlying source.
|
||||
* <p>Often useful in testing scenarios when creating anonymous implementations
|
||||
* that never query an actual source but rather return hard-coded values.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public PropertySource(String name) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue