Skip to content

Commit ede6927

Browse files
committed
Introduce template method for easier customization of fragments.
Closes #3638.
1 parent 2edc29f commit ede6927

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactory.java

+17-8
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import org.springframework.data.repository.core.RepositoryMetadata;
4040
import org.springframework.data.repository.core.support.RepositoryComposition.RepositoryFragments;
4141
import org.springframework.data.repository.core.support.RepositoryFactorySupport;
42-
import org.springframework.data.repository.core.support.RepositoryFragment;
4342
import org.springframework.data.repository.query.QueryLookupStrategy;
4443
import org.springframework.data.repository.query.QueryLookupStrategy.Key;
4544
import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider;
@@ -92,8 +91,21 @@ protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
9291
*/
9392
@Override
9493
protected RepositoryFragments getRepositoryFragments(RepositoryMetadata metadata) {
94+
return getRepositoryFragments(metadata, operations);
95+
}
9596

96-
RepositoryFragments fragments = RepositoryFragments.empty();
97+
/**
98+
* Creates {@link RepositoryFragments} based on {@link RepositoryMetadata} to add Mongo-specific extensions. Typically
99+
* adds a {@link QuerydslMongoPredicateExecutor} if the repository interface uses Querydsl.
100+
* <p>
101+
* Can be overridden by subclasses to customize {@link RepositoryFragments}.
102+
*
103+
* @param metadata repository metadata.
104+
* @param operations the MongoDB operations manager.
105+
* @return
106+
* @since 3.2.1
107+
*/
108+
protected RepositoryFragments getRepositoryFragments(RepositoryMetadata metadata, MongoOperations operations) {
97109

98110
boolean isQueryDslRepository = QUERY_DSL_PRESENT
99111
&& QuerydslPredicateExecutor.class.isAssignableFrom(metadata.getRepositoryInterface());
@@ -105,14 +117,11 @@ protected RepositoryFragments getRepositoryFragments(RepositoryMetadata metadata
105117
"Cannot combine Querydsl and reactive repository support in a single interface");
106118
}
107119

108-
MongoEntityInformation<?, Serializable> entityInformation = getEntityInformation(metadata.getDomainType(),
109-
metadata);
110-
111-
fragments = fragments.append(RepositoryFragment.implemented(
112-
getTargetRepositoryViaReflection(QuerydslMongoPredicateExecutor.class, entityInformation, operations)));
120+
return RepositoryFragments
121+
.just(new QuerydslMongoPredicateExecutor<>(getEntityInformation(metadata.getDomainType()), operations));
113122
}
114123

115-
return fragments;
124+
return RepositoryFragments.empty();
116125
}
117126

118127
/*

0 commit comments

Comments
 (0)