DATACMNS-1534 - Cache BeanFactory lookup for EvaluationContextExtension.
We now cache the BeanFactory lookup for EvaluationContextExtension within the ExtensionAwareEvalutationContextProvider to avoid (expensive) repeated context scans when creating the actual EvaluationContext. Original pull request: #395.
This commit is contained in:
committed by
Oliver Drotbohm
parent
15969ee01f
commit
d6bb21d24f
@@ -25,7 +25,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
@@ -37,6 +36,7 @@ import org.springframework.data.spel.EvaluationContextExtensionInformation.Exten
|
||||
import org.springframework.data.spel.EvaluationContextExtensionInformation.RootObjectInformation;
|
||||
import org.springframework.data.spel.spi.EvaluationContextExtension;
|
||||
import org.springframework.data.spel.spi.Function;
|
||||
import org.springframework.data.util.Lazy;
|
||||
import org.springframework.data.util.Optionals;
|
||||
import org.springframework.expression.AccessException;
|
||||
import org.springframework.expression.EvaluationContext;
|
||||
@@ -66,7 +66,7 @@ public class ExtensionAwareEvaluationContextProvider implements EvaluationContex
|
||||
|
||||
private final Map<Class<?>, EvaluationContextExtensionInformation> extensionInformationCache = new ConcurrentHashMap<>();
|
||||
|
||||
private final Supplier<? extends Collection<? extends EvaluationContextExtension>> extensions;
|
||||
private final Lazy<? extends Collection<? extends EvaluationContextExtension>> extensions;
|
||||
private ListableBeanFactory beanFactory;
|
||||
|
||||
ExtensionAwareEvaluationContextProvider() {
|
||||
@@ -81,7 +81,7 @@ public class ExtensionAwareEvaluationContextProvider implements EvaluationContex
|
||||
*/
|
||||
public ExtensionAwareEvaluationContextProvider(ListableBeanFactory beanFactory) {
|
||||
|
||||
this(() -> getExtensionsFrom(beanFactory));
|
||||
this(Lazy.of(() -> getExtensionsFrom(beanFactory)));
|
||||
|
||||
this.beanFactory = beanFactory;
|
||||
}
|
||||
@@ -92,7 +92,7 @@ public class ExtensionAwareEvaluationContextProvider implements EvaluationContex
|
||||
* @param extensions must not be {@literal null}.
|
||||
*/
|
||||
public ExtensionAwareEvaluationContextProvider(Collection<? extends EvaluationContextExtension> extensions) {
|
||||
this(() -> extensions);
|
||||
this(Lazy.of(extensions));
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
Reference in New Issue
Block a user