From 1c45fcfcdc4594e485d1aa93abc93d136849c046 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 21 Mar 2017 18:48:36 +0100 Subject: [PATCH] DATACMNS-867 - Lazify lookups in AbstractPersistentProperty. --- .../mapping/model/AbstractPersistentProperty.java | 12 ++++++------ .../model/AnnotationBasedPersistentProperty.java | 12 +++++------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java b/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java index f1a9588b4..b96943744 100644 --- a/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java +++ b/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java @@ -50,10 +50,10 @@ public abstract class AbstractPersistentProperty

CAUSE_FIELD = ReflectionUtils.findField(Throwable.class, "cause"); } - protected final String name; - protected final TypeInformation information; - protected final Class rawType; - protected final Optional> association; + private final String name; + private final TypeInformation information; + private final Class rawType; + private final Lazy>> association; private final @Getter PersistentEntity owner; private final @Getter(AccessLevel.PROTECTED) Property property; private final Lazy hashCode; @@ -71,7 +71,7 @@ public abstract class AbstractPersistentProperty

this.information = PropertyPath.from(Pattern.quote(property.getName()), owner.getTypeInformation()) .getTypeInformation(); this.property = property; - this.association = isAssociation() ? Optional.of(createAssociation()) : Optional.empty(); + this.association = Lazy.of(() -> isAssociation() ? Optional.of(createAssociation()) : Optional.empty()); this.owner = owner; this.hashCode = Lazy.of(property::hashCode); @@ -206,7 +206,7 @@ public abstract class AbstractPersistentProperty

*/ @Override public Optional> getAssociation() { - return association; + return association.get(); } /* diff --git a/src/main/java/org/springframework/data/mapping/model/AnnotationBasedPersistentProperty.java b/src/main/java/org/springframework/data/mapping/model/AnnotationBasedPersistentProperty.java index 66a9c0001..d273329d2 100644 --- a/src/main/java/org/springframework/data/mapping/model/AnnotationBasedPersistentProperty.java +++ b/src/main/java/org/springframework/data/mapping/model/AnnotationBasedPersistentProperty.java @@ -56,8 +56,11 @@ public abstract class AnnotationBasedPersistentProperty

value; private final Map, Optional> annotationCache = new HashMap<>(); - private Lazy isTransient; - private Lazy usePropertyAccess; + private final Lazy usePropertyAccess = Lazy.of(() -> findPropertyOrOwnerAnnotation(AccessType.class)// + .map(it -> Type.PROPERTY.equals(it.value()))// + .orElse(super.usePropertyAccess())); + private final Lazy isTransient = Lazy.of(() -> super.isTransient() || isAnnotationPresent(Transient.class) + || isAnnotationPresent(Value.class) || isAnnotationPresent(Autowired.class)); /** * Creates a new {@link AnnotationBasedPersistentProperty}. @@ -73,11 +76,6 @@ public abstract class AnnotationBasedPersistentProperty

findPropertyOrOwnerAnnotation(AccessType.class)// - .map(it -> Type.PROPERTY.equals(it.value()))// - .orElse(super.usePropertyAccess())); - this.isTransient = Lazy.of(() -> super.isTransient() || isAnnotationPresent(Transient.class) - || isAnnotationPresent(Value.class) || isAnnotationPresent(Autowired.class)); } /**