AggregateBinder Class — spring-boot Architecture
Architecture documentation for the AggregateBinder class in AggregateBinder.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
core/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/AggregateBinder.java lines 34–121
abstract class AggregateBinder<T> {
private final Context context;
AggregateBinder(Context context) {
this.context = context;
}
/**
* Determine if recursive binding is supported.
* @param source the configuration property source or {@code null} for all sources.
* @return if recursive binding is supported
*/
protected abstract boolean isAllowRecursiveBinding(@Nullable ConfigurationPropertySource source);
/**
* Perform binding for the aggregate.
* @param name the configuration property name to bind
* @param target the target to bind
* @param elementBinder an element binder
* @return the bound aggregate or null
*/
@SuppressWarnings("unchecked")
final @Nullable Object bind(ConfigurationPropertyName name, Bindable<?> target,
AggregateElementBinder elementBinder) {
Object result = bindAggregate(name, target, elementBinder);
Supplier<?> value = target.getValue();
if (result == null || value == null) {
return result;
}
return merge((Supplier<T>) value, (T) result);
}
/**
* Perform the actual aggregate binding.
* @param name the configuration property name to bind
* @param target the target to bind
* @param elementBinder an element binder
* @return the bound result
*/
protected abstract @Nullable Object bindAggregate(ConfigurationPropertyName name, Bindable<?> target,
AggregateElementBinder elementBinder);
/**
* Merge any additional elements into the existing aggregate.
* @param existing the supplier for the existing value
* @param additional the additional elements to merge
* @return the merged result
*/
protected abstract T merge(Supplier<T> existing, T additional);
/**
* Return the context being used by this binder.
* @return the context
*/
protected final Context getContext() {
return this.context;
}
/**
* Internal class used to supply the aggregate and cache the value.
*
* @param <T> the aggregate type
*/
protected static class AggregateSupplier<T> {
private final Supplier<T> supplier;
private @Nullable T supplied;
public AggregateSupplier(Supplier<T> supplier) {
this.supplier = supplier;
}
public T get() {
if (this.supplied == null) {
this.supplied = this.supplier.get();
}
return this.supplied;
}
public boolean wasSupplied() {
return this.supplied != null;
}
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free