Browse Source

Polishing.

Fix fragment method order lookup. Lazify ProjectionFactory retrieval on DefaultFragmentCreationContext.

See #3265
pull/3304/head
Mark Paluch 8 months ago
parent
commit
a25a1bd206
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 4
      src/main/java/org/springframework/data/repository/aot/generate/AotRepositoryMetadata.java
  2. 6
      src/main/java/org/springframework/data/repository/core/support/RepositoryComposition.java
  3. 7
      src/main/java/org/springframework/data/repository/core/support/RepositoryFactoryBeanSupport.java

4
src/main/java/org/springframework/data/repository/aot/generate/AotRepositoryMetadata.java

@ -25,7 +25,7 @@ import org.springframework.data.repository.aot.generate.json.JSONObject; @@ -25,7 +25,7 @@ import org.springframework.data.repository.aot.generate.json.JSONObject;
* @author Mark Paluch
* @since 4.0
*/
record AotRepositoryMetadata(String name, String moduleName,
record AotRepositoryMetadata(String name, String module,
org.springframework.data.repository.aot.generate.AotRepositoryMetadata.RepositoryType type,
List<AotRepositoryMethod> methods) {
@ -37,7 +37,7 @@ record AotRepositoryMetadata(String name, String moduleName, @@ -37,7 +37,7 @@ record AotRepositoryMetadata(String name, String moduleName,
JSONObject metadata = new JSONObject();
metadata.put("name", name());
metadata.put("moduleName", moduleName());
metadata.put("module", module());
metadata.put("type", type().name());
JSONArray methods = new JSONArray();

6
src/main/java/org/springframework/data/repository/core/support/RepositoryComposition.java

@ -556,9 +556,9 @@ public class RepositoryComposition { @@ -556,9 +556,9 @@ public class RepositoryComposition {
private static @Nullable Method findMethod(InvokedMethod invokedMethod, List<MethodLookup.MethodPredicate> lookups,
RepositoryFragments fragments) {
for (RepositoryFragment<?> fragment : fragments) {
for (Method candidate : fragment.findMethods(invokedMethod.getName())) {
for (MethodLookup.MethodPredicate methodPredicate : lookups) {
for (MethodLookup.MethodPredicate methodPredicate : lookups) {
for (RepositoryFragment<?> fragment : fragments) {
for (Method candidate : fragment.findMethods(invokedMethod.getName())) {
if (methodPredicate.test(invokedMethod, candidate)) {
return candidate;
}

7
src/main/java/org/springframework/data/repository/core/support/RepositoryFactoryBeanSupport.java

@ -17,6 +17,7 @@ package org.springframework.data.repository.core.support; @@ -17,6 +17,7 @@ package org.springframework.data.repository.core.support;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;
import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
@ -373,7 +374,7 @@ public abstract class RepositoryFactoryBeanSupport<T extends Repository<S, ID>, @@ -373,7 +374,7 @@ public abstract class RepositoryFactoryBeanSupport<T extends Repository<S, ID>,
}
FragmentCreationContext creationContext = new DefaultFragmentCreationContext(repositoryMetadata,
valueExpressionDelegate, factory.getProjectionFactory());
valueExpressionDelegate, factory::getProjectionFactory);
RepositoryFragments fragments = RepositoryFragments.empty();
for (RepositoryFragmentsFunction function : functions) {
@ -443,7 +444,7 @@ public abstract class RepositoryFactoryBeanSupport<T extends Repository<S, ID>, @@ -443,7 +444,7 @@ public abstract class RepositoryFactoryBeanSupport<T extends Repository<S, ID>,
private record DefaultFragmentCreationContext(RepositoryMetadata repositoryMetadata,
ValueExpressionDelegate valueExpressionDelegate,
ProjectionFactory projectionFactory) implements FragmentCreationContext {
Supplier<ProjectionFactory> projectionFactory) implements FragmentCreationContext {
@Override
public RepositoryMetadata getRepositoryMetadata() {
@ -457,7 +458,7 @@ public abstract class RepositoryFactoryBeanSupport<T extends Repository<S, ID>, @@ -457,7 +458,7 @@ public abstract class RepositoryFactoryBeanSupport<T extends Repository<S, ID>,
@Override
public ProjectionFactory getProjectionFactory() {
return projectionFactory();
return projectionFactory().get();
}
}

Loading…
Cancel
Save