Refactored internal mechanism to resolve RepositoryQuery instances.
Simplified creation of RepositoryQuery instances by changing the QueryLookupStrategy interface method to take a plain Method instead of a QueryMethod. This way we get rid of an indirection where subclasses have to implement two methods (one creating a QueryMethod, one returning the QueryLookupStrategy). Thus a QueryLookupStrategy is responsible for creating RepositoryQueries from a Method and using a QueryMethod is an implementation detail of QueryLookupStrategy implementations actually.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package org.springframework.data.repository.query;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.springframework.util.StringUtils;
|
||||
@@ -10,7 +11,7 @@ import org.springframework.util.StringUtils;
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
public interface QueryLookupStrategy<Q extends QueryMethod> {
|
||||
public interface QueryLookupStrategy {
|
||||
|
||||
public static enum Key {
|
||||
|
||||
@@ -40,5 +41,5 @@ public interface QueryLookupStrategy<Q extends QueryMethod> {
|
||||
* @param method
|
||||
* @return
|
||||
*/
|
||||
RepositoryQuery resolveQuery(Q method);
|
||||
RepositoryQuery resolveQuery(Method method);
|
||||
}
|
||||
@@ -38,7 +38,7 @@ import org.springframework.util.Assert;
|
||||
public abstract class RepositoryFactoryBeanSupport<T extends Repository<?, ?>>
|
||||
implements FactoryBean<T>, InitializingBean, BeanFactoryAware {
|
||||
|
||||
private RepositoryFactorySupport<?> factory;
|
||||
private RepositoryFactorySupport factory;
|
||||
|
||||
private Key queryLookupStrategyKey;
|
||||
private Class<? extends T> repositoryInterface;
|
||||
@@ -150,7 +150,7 @@ public abstract class RepositoryFactoryBeanSupport<T extends Repository<?, ?>>
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
protected abstract RepositoryFactorySupport<?> createRepositoryFactory();
|
||||
protected abstract RepositoryFactorySupport createRepositoryFactory();
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -49,7 +49,7 @@ import org.springframework.util.Assert;
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
*/
|
||||
public abstract class RepositoryFactorySupport<Q extends QueryMethod> {
|
||||
public abstract class RepositoryFactorySupport {
|
||||
|
||||
private QueryLookupStrategy.Key queryLookupStrategyKey;
|
||||
|
||||
@@ -147,15 +147,6 @@ public abstract class RepositoryFactorySupport<Q extends QueryMethod> {
|
||||
Class<T> domainClass);
|
||||
|
||||
|
||||
/**
|
||||
* Create a {@link QueryMethod} instance for the given {@link Method}.
|
||||
*
|
||||
* @param method
|
||||
* @return
|
||||
*/
|
||||
protected abstract Q getQueryMethod(Method method);
|
||||
|
||||
|
||||
/**
|
||||
* Determines the base class for the repository to be created.
|
||||
*
|
||||
@@ -171,7 +162,7 @@ public abstract class RepositoryFactorySupport<Q extends QueryMethod> {
|
||||
* @param key can be {@literal null}
|
||||
* @return
|
||||
*/
|
||||
protected abstract QueryLookupStrategy<Q> getQueryLookupStrategy(Key key);
|
||||
protected abstract QueryLookupStrategy getQueryLookupStrategy(Key key);
|
||||
|
||||
|
||||
/**
|
||||
@@ -360,12 +351,12 @@ public abstract class RepositoryFactorySupport<Q extends QueryMethod> {
|
||||
this.customImplementation = customImplementation;
|
||||
this.target = target;
|
||||
|
||||
QueryLookupStrategy<Q> strategy =
|
||||
QueryLookupStrategy lookupStrategy =
|
||||
getQueryLookupStrategy(queryLookupStrategyKey);
|
||||
|
||||
for (Method method : getFinderMethods(repositoryInterface)) {
|
||||
Q queryMethod = getQueryMethod(method);
|
||||
queries.put(method, strategy.resolveQuery(queryMethod));
|
||||
|
||||
queries.put(method, lookupStrategy.resolveQuery(method));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user