From 1b886b29ae27fcf37c8286d18aa5ffc94aacc779 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Tue, 28 Apr 2020 00:31:29 +0200 Subject: [PATCH] DATAREST-1513 - Avoid superflous instantiations of EmbeddedResourcesAssembler. --- .../PersistentEntityResourceAssembler.java | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/PersistentEntityResourceAssembler.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/PersistentEntityResourceAssembler.java index fc954ae40..a7635f46b 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/PersistentEntityResourceAssembler.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/PersistentEntityResourceAssembler.java @@ -15,9 +15,6 @@ */ package org.springframework.data.rest.webmvc; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; - import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.context.PersistentEntities; import org.springframework.data.rest.core.support.SelfLinkProvider; @@ -27,7 +24,6 @@ import org.springframework.data.rest.webmvc.support.Projector; import org.springframework.hateoas.Link; import org.springframework.hateoas.ResourceAssembler; import org.springframework.hateoas.core.EmbeddedWrapper; -import org.springframework.hateoas.core.EmbeddedWrappers; import org.springframework.util.Assert; /** @@ -35,14 +31,36 @@ import org.springframework.util.Assert; * * @author Oliver Gierke */ -@RequiredArgsConstructor -public class PersistentEntityResourceAssembler implements ResourceAssembler { +public class PersistentEntityResourceAssembler + implements ResourceAssembler { - private final @NonNull PersistentEntities entities; - private final @NonNull Projector projector; - private final @NonNull Associations associations; - private final @NonNull SelfLinkProvider linkProvider; - private final @NonNull EmbeddedWrappers wrappers = new EmbeddedWrappers(false); + private final PersistentEntities entities; + private final Projector projector; + private final SelfLinkProvider linkProvider; + private final EmbeddedResourcesAssembler embeddedAssembler; + + /** + * Creates a new {@link PersistentEntityResourceAssembler} for the given {@link PersistentEntities}, + * {@link Projector}, {@link Associations} and {@link SelfLinkProvider}. + * + * @param entities must not be {@literal null}. + * @param projector must not be {@literal null}. + * @param associations must not be {@literal null}. + * @param linkProvider must not be {@literal null}. + */ + public PersistentEntityResourceAssembler(PersistentEntities entities, Projector projector, Associations associations, + SelfLinkProvider linkProvider) { + + Assert.notNull(entities, "PersistentEntities must not be null!"); + Assert.notNull(projector, "Projector must not be null!"); + Assert.notNull(associations, "Associations must not be null!"); + Assert.notNull(linkProvider, "SelfLinkProvider must not be null!"); + + this.entities = entities; + this.projector = projector; + this.linkProvider = linkProvider; + this.embeddedAssembler = new EmbeddedResourcesAssembler(entities, associations, projector); + } /* * (non-Javadoc) @@ -85,7 +103,7 @@ public class PersistentEntityResourceAssembler implements ResourceAssembler getEmbeddedResources(Object instance) { - return new EmbeddedResourcesAssembler(entities, associations, projector).getEmbeddedResources(instance); + return embeddedAssembler.getEmbeddedResources(instance); } /**