diff --git a/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java b/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java index 790feb095..641dd0f77 100644 --- a/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java +++ b/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java @@ -44,6 +44,7 @@ import org.springframework.data.mapping.PersistentProperty; import org.springframework.data.mapping.PersistentPropertyPath; import org.springframework.data.mapping.PersistentPropertyPaths; import org.springframework.data.mapping.PropertyPath; +import org.springframework.data.mapping.model.BeanWrapperPropertyAccessorFactory; import org.springframework.data.mapping.model.ClassGeneratingPropertyAccessorFactory; import org.springframework.data.mapping.model.EntityInstantiators; import org.springframework.data.mapping.model.InstantiationAwarePropertyAccessorFactory; @@ -85,6 +86,8 @@ import org.springframework.util.ReflectionUtils.FieldFilter; public abstract class AbstractMappingContext, P extends PersistentProperty

> implements MappingContext, ApplicationEventPublisherAware, ApplicationContextAware, InitializingBean { + private static final boolean IN_NATIVE_IMAGE = System.getProperty("org.graalvm.nativeimage.imagecode") != null; + private final Optional NONE = Optional.empty(); private final Map, Optional> persistentEntities = new HashMap<>(); private final PersistentPropertyAccessorFactory persistentPropertyAccessorFactory; @@ -106,7 +109,8 @@ public abstract class AbstractMappingContext(this); EntityInstantiators instantiators = new EntityInstantiators(); - ClassGeneratingPropertyAccessorFactory accessorFactory = new ClassGeneratingPropertyAccessorFactory(); + PersistentPropertyAccessorFactory accessorFactory = IN_NATIVE_IMAGE ? BeanWrapperPropertyAccessorFactory.INSTANCE + : new ClassGeneratingPropertyAccessorFactory(); this.persistentPropertyAccessorFactory = new InstantiationAwarePropertyAccessorFactory(accessorFactory, instantiators); diff --git a/src/main/java/org/springframework/data/mapping/model/BeanWrapperPropertyAccessorFactory.java b/src/main/java/org/springframework/data/mapping/model/BeanWrapperPropertyAccessorFactory.java index 2f700d958..46be82d08 100644 --- a/src/main/java/org/springframework/data/mapping/model/BeanWrapperPropertyAccessorFactory.java +++ b/src/main/java/org/springframework/data/mapping/model/BeanWrapperPropertyAccessorFactory.java @@ -23,7 +23,7 @@ import org.springframework.data.mapping.PersistentPropertyAccessor; * * @author Oliver Gierke */ -enum BeanWrapperPropertyAccessorFactory implements PersistentPropertyAccessorFactory { +public enum BeanWrapperPropertyAccessorFactory implements PersistentPropertyAccessorFactory { INSTANCE; diff --git a/src/main/java/org/springframework/data/mapping/model/ClassGeneratingEntityInstantiator.java b/src/main/java/org/springframework/data/mapping/model/ClassGeneratingEntityInstantiator.java index a80ad577d..8f95ebeeb 100644 --- a/src/main/java/org/springframework/data/mapping/model/ClassGeneratingEntityInstantiator.java +++ b/src/main/java/org/springframework/data/mapping/model/ClassGeneratingEntityInstantiator.java @@ -142,9 +142,9 @@ class ClassGeneratingEntityInstantiator implements EntityInstantiator { */ boolean shouldUseReflectionEntityInstantiator(PersistentEntity entity) { - if(IN_NATIVE_IMAGE) { + if (IN_NATIVE_IMAGE) { - if(LOGGER.isDebugEnabled()) { + if (LOGGER.isDebugEnabled()) { LOGGER.debug(String.format("graalvm.nativeimage - fall back to reflection for %s.", entity.getName())); }