From e20938a3aea4a8620c74ef7f0c1b066aa7fce35c Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Thu, 3 May 2012 17:25:51 +0200 Subject: [PATCH] DATAMONGO-439 - Performance improvements in mapping subsystem. Fixed minor performance problems discovered by the fix for DATAMONGO-439. We're now caching the information whether a constructor parameter is an enclosing class parameter. PersistentEntityParameterValueProvider is throwing an exception now if the parameter is not referring to a property of the entity (via the parameter name). --- .../data/mapping/PreferredConstructor.java | 10 ++++++++-- .../model/PersistentEntityParameterValueProvider.java | 5 +++++ ...ersistentEntityParameterValueProviderUnitTests.java | 10 +++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/PreferredConstructor.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/PreferredConstructor.java index 0c5ea7d7f..fb58c1d49 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/PreferredConstructor.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/PreferredConstructor.java @@ -155,6 +155,8 @@ public class PreferredConstructor> { private final String key; private final PersistentEntity entity; + private Boolean enclosingClassCache; + /** * Creates a new {@link Parameter} with the given name, {@link TypeInformation} as well as an array of * {@link Annotation}s. Will insprect the annotations for an {@link Value} annotation to lookup a key or an SpEL @@ -244,8 +246,12 @@ public class PreferredConstructor> { private boolean isEnclosingClassParameter() { - Class owningType = entity.getType(); - return owningType.isMemberClass() && type.getType().equals(owningType.getEnclosingClass()); + if (enclosingClassCache == null) { + Class owningType = entity.getType(); + this.enclosingClassCache = owningType.isMemberClass() && type.getType().equals(owningType.getEnclosingClass()); + } + + return enclosingClassCache; } /* diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProvider.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProvider.java index bc138064f..df7daa65b 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProvider.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProvider.java @@ -86,6 +86,11 @@ public class PersistentEntityParameterValueProvider

propertyValueProvider; + @Mock + P property; /** * @see DATACMNS-134 @@ -50,7 +52,11 @@ public class PersistentEntityParameterValueProviderUnitTests

entity = new BasicPersistentEntity(ClassTypeInformation.from(Inner.class)); + PersistentEntity entity = new BasicPersistentEntity(ClassTypeInformation.from(Inner.class)) { + public P getPersistentProperty(String name) { + return property; + } + }; PreferredConstructor constructor = entity.getPersistenceConstructor(); Iterator> iterator = constructor.getParameters().iterator(); @@ -65,6 +71,8 @@ public class PersistentEntityParameterValueProviderUnitTests