CollectionBinder Class — spring-boot Architecture
Architecture documentation for the CollectionBinder class in CollectionBinder.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
core/spring-boot/src/main/java/org/springframework/boot/context/properties/bind/CollectionBinder.java lines 36–97
class CollectionBinder extends IndexedElementsBinder<Collection<Object>> {
CollectionBinder(Context context) {
super(context);
}
@Override
protected @Nullable Object bindAggregate(ConfigurationPropertyName name, Bindable<?> target,
AggregateElementBinder elementBinder) {
ResolvableType aggregateType = ResolvableType.forClassWithGenerics(List.class,
target.getType().asCollection().getGenerics());
ResolvableType elementType = target.getType().asCollection().getGeneric();
IndexedCollectionSupplier result = new IndexedCollectionSupplier(
() -> CollectionFactory.createCollection(List.class, elementType.resolve(), 0));
bindIndexed(name, target, elementBinder, aggregateType, elementType, result);
if (result.wasSupplied()) {
return result.get();
}
return null;
}
@Override
protected Collection<Object> merge(Supplier<Collection<Object>> existing, Collection<Object> additional) {
Collection<Object> existingCollection = getExistingIfPossible(existing);
if (existingCollection == null) {
return additional;
}
try {
existingCollection.clear();
existingCollection.addAll(additional);
return copyIfPossible(existingCollection);
}
catch (UnsupportedOperationException ex) {
return createNewCollection(additional);
}
}
private @Nullable Collection<Object> getExistingIfPossible(Supplier<Collection<Object>> existing) {
try {
return existing.get();
}
catch (Exception ex) {
return null;
}
}
private Collection<Object> copyIfPossible(Collection<Object> collection) {
try {
return createNewCollection(collection);
}
catch (Exception ex) {
return collection;
}
}
private Collection<Object> createNewCollection(Collection<Object> collection) {
Collection<Object> result = CollectionFactory.createCollection(collection.getClass(), collection.size());
result.addAll(collection);
return result;
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free