BeanAdapter Class — spring-boot Architecture
Architecture documentation for the BeanAdapter class in ApplicationConversionService.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
core/spring-boot/src/main/java/org/springframework/boot/convert/ApplicationConversionService.java lines 404–464
abstract static class BeanAdapter<B> implements ConditionalGenericConverter {
private final B bean;
private final ResolvableTypePair types;
BeanAdapter(B bean, ResolvableType beanType) {
Assert.isInstanceOf(beanType.toClass(), bean);
ResolvableType type = ResolvableType.forClass(getClass()).as(BeanAdapter.class).getGeneric();
ResolvableType[] generics = beanType.as(type.toClass()).getGenerics();
this.bean = bean;
this.types = getResolvableTypePair(generics);
}
protected ResolvableTypePair getResolvableTypePair(ResolvableType[] generics) {
return new ResolvableTypePair(generics[0], generics[1]);
}
protected B bean() {
return this.bean;
}
@Override
public Set<ConvertiblePair> getConvertibleTypes() {
return Set.of(new ConvertiblePair(this.types.source().toClass(), this.types.target().toClass()));
}
@Override
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
return (this.types.target().toClass() == targetType.getObjectType()
&& matchesTargetType(targetType.getResolvableType()));
}
private boolean matchesTargetType(ResolvableType targetType) {
ResolvableType ours = this.types.target();
return targetType.getType() instanceof Class || targetType.isAssignableFrom(ours)
|| this.types.target().hasUnresolvableGenerics();
}
protected final boolean conditionalConverterCandidateMatches(Object conditionalConverterCandidate,
TypeDescriptor sourceType, TypeDescriptor targetType) {
return (conditionalConverterCandidate instanceof ConditionalConverter conditionalConverter)
? conditionalConverter.matches(sourceType, targetType) : true;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
protected final @Nullable Object convert(@Nullable Object source, TypeDescriptor targetType,
Converter<?, ?> converter) {
return (source != null) ? ((Converter) converter).convert(source) : convertNull(targetType);
}
private @Nullable Object convertNull(TypeDescriptor targetType) {
return (targetType.getObjectType() != Optional.class) ? null : Optional.empty();
}
@Override
public String toString() {
return this.types + " : " + this.bean;
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free