diff --git a/benchmark/commons/src/main/java/org/springframework/data/microbenchmark/commons/convert/TypicalEntityReaderBenchmark.java b/benchmark/commons/src/main/java/org/springframework/data/microbenchmark/commons/convert/TypicalEntityReaderBenchmark.java index 18ffd35..effd4ca 100644 --- a/benchmark/commons/src/main/java/org/springframework/data/microbenchmark/commons/convert/TypicalEntityReaderBenchmark.java +++ b/benchmark/commons/src/main/java/org/springframework/data/microbenchmark/commons/convert/TypicalEntityReaderBenchmark.java @@ -34,6 +34,7 @@ import org.springframework.data.mapping.Association; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PersistentProperty; import org.springframework.data.mapping.PersistentPropertyAccessor; +import org.springframework.data.mapping.PreferredConstructor; import org.springframework.data.mapping.PreferredConstructor.Parameter; import org.springframework.data.mapping.context.AbstractMappingContext; import org.springframework.data.mapping.context.MappingContext; @@ -59,6 +60,17 @@ public class TypicalEntityReaderBenchmark extends AbstractMicrobenchmark { private final ConversionService conversionService = DefaultConversionService.getSharedInstance(); private final CustomConversions customConversions = new CustomConversions(StoreConversions.NONE, Collections.emptyList()); + private final ParameterValueProvider NONE = new ParameterValueProvider() { + + /* + * (non-Javadoc) + * @see org.springframework.data.mapping.model.ParameterValueProvider#getParameterValue(org.springframework.data.mapping.PreferredConstructor.Parameter) + */ + @Override + public T getParameterValue(Parameter parameter) { + return null; + } + }; private final Map simpleEntityData = new HashMap<>(); @@ -178,6 +190,24 @@ public class TypicalEntityReaderBenchmark extends AbstractMicrobenchmark { } MyPersistentEntity persistentEntity = context.getRequiredPersistentEntity(classToRead); + PreferredConstructor constructor = persistentEntity.getPersistenceConstructor(); + + ParameterValueProvider provider = constructor.isNoArgConstructor() // + ? NONE // + : new ParameterValueProvider() { + + @Override + public T getParameterValue(Parameter parameter) { + return (T) getValue(data, parameter.getName(), parameter.getType().getType(), queryCustomConversions); + } + }; + + EntityInstantiator instantiator = instantiators.getInstantiatorFor(persistentEntity); + Object instance = instantiator.createInstance(persistentEntity, provider); + + if (!persistentEntity.requiresPropertyPopulation()) { + return instance; + } PropertyValueProvider valueProvider = new PropertyValueProvider() { @@ -187,16 +217,6 @@ public class TypicalEntityReaderBenchmark extends AbstractMicrobenchmark { } }; - ParameterValueProvider provider = new ParameterValueProvider() { - @Override - public T getParameterValue(Parameter parameter) { - return (T) getValue(data, parameter.getName(), parameter.getType().getType(), queryCustomConversions); - } - }; - - EntityInstantiator instantiator = instantiators.getInstantiatorFor(persistentEntity); - Object instance = instantiator.createInstance(persistentEntity, provider); - PersistentPropertyAccessor accessor = new ConvertingPropertyAccessor<>( persistentEntity.getPropertyAccessor(instance), conversionService); @@ -244,7 +264,7 @@ public class TypicalEntityReaderBenchmark extends AbstractMicrobenchmark { */ static class MyMappingContext extends AbstractMappingContext, MyPersistentProperty> { - /* + /* * (non-Javadoc) * @see org.springframework.data.mapping.context.AbstractMappingContext#createPersistentEntity(org.springframework.data.util.TypeInformation) */ @@ -253,7 +273,7 @@ public class TypicalEntityReaderBenchmark extends AbstractMicrobenchmark { return new MyPersistentEntity(typeInformation); } - /* + /* * (non-Javadoc) * @see org.springframework.data.mapping.context.AbstractMappingContext#createPersistentProperty(org.springframework.data.mapping.model.Property, org.springframework.data.mapping.model.MutablePersistentEntity, org.springframework.data.mapping.model.SimpleTypeHolder) */ @@ -274,7 +294,7 @@ public class TypicalEntityReaderBenchmark extends AbstractMicrobenchmark { super(property, owner, simpleTypeHolder); } - /* + /* * (non-Javadoc) * @see org.springframework.data.mapping.model.AbstractPersistentProperty#createAssociation() */