ConfigurationPropertySourcesPropertyResolver Class — spring-boot Architecture
Architecture documentation for the ConfigurationPropertySourcesPropertyResolver class in ConfigurationPropertySourcesPropertyResolver.java from the spring-boot codebase.
Entity Profile
Source Code
core/spring-boot/src/main/java/org/springframework/boot/context/properties/source/ConfigurationPropertySourcesPropertyResolver.java lines 34–140
class ConfigurationPropertySourcesPropertyResolver extends AbstractPropertyResolver {
private final MutablePropertySources propertySources;
private final DefaultResolver defaultResolver;
ConfigurationPropertySourcesPropertyResolver(MutablePropertySources propertySources) {
this.propertySources = propertySources;
this.defaultResolver = new DefaultResolver(propertySources);
}
@Override
public boolean containsProperty(String key) {
ConfigurationPropertySourcesPropertySource attached = getAttached();
if (attached != null) {
ConfigurationPropertyName name = ConfigurationPropertyName.of(key, true);
if (name != null) {
try {
return attached.findConfigurationProperty(name) != null;
}
catch (Exception ex) {
// Ignore
}
}
}
return this.defaultResolver.containsProperty(key);
}
@Override
public @Nullable String getProperty(String key) {
return getProperty(key, String.class, true);
}
@Override
public <T> @Nullable T getProperty(String key, Class<T> targetValueType) {
return getProperty(key, targetValueType, true);
}
@Override
protected @Nullable String getPropertyAsRawString(String key) {
return getProperty(key, String.class, false);
}
private <T> @Nullable T getProperty(String key, Class<T> targetValueType, boolean resolveNestedPlaceholders) {
Object value = findPropertyValue(key);
if (value == null) {
return null;
}
if (resolveNestedPlaceholders && value instanceof String string) {
value = resolveNestedPlaceholders(string);
}
try {
return convertValueIfNecessary(value, targetValueType);
}
catch (ConversionFailedException ex) {
Exception wrappedCause = new InvalidConfigurationPropertyValueException(key, value,
"Failed to convert to type " + ex.getTargetType(), ex.getCause());
throw new ConversionFailedException(ex.getSourceType(), ex.getTargetType(), ex.getValue(), wrappedCause);
}
}
private @Nullable Object findPropertyValue(String key) {
ConfigurationPropertySourcesPropertySource attached = getAttached();
if (attached != null) {
ConfigurationPropertyName name = ConfigurationPropertyName.of(key, true);
if (name != null) {
try {
ConfigurationProperty configurationProperty = attached.findConfigurationProperty(name);
return (configurationProperty != null) ? configurationProperty.getValue() : null;
}
catch (Exception ex) {
// Ignore
}
}
}
return this.defaultResolver.getProperty(key, Object.class, false);
}
private @Nullable ConfigurationPropertySourcesPropertySource getAttached() {
ConfigurationPropertySourcesPropertySource attached = (ConfigurationPropertySourcesPropertySource) ConfigurationPropertySources
.getAttached(this.propertySources);
Iterable<ConfigurationPropertySource> attachedSource = (attached != null) ? attached.getSource() : null;
if ((attachedSource instanceof SpringConfigurationPropertySources springSource)
&& springSource.isUsingSources(this.propertySources)) {
return attached;
}
return null;
}
/**
* Default {@link PropertySourcesPropertyResolver} used if
* {@link ConfigurationPropertySources} is not attached.
*/
static class DefaultResolver extends PropertySourcesPropertyResolver {
DefaultResolver(PropertySources propertySources) {
super(propertySources);
}
@Override
public <T> @Nullable T getProperty(String key, Class<T> targetValueType, boolean resolveNestedPlaceholders) {
return super.getProperty(key, targetValueType, resolveNestedPlaceholders);
}
}
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free