Skip to content

Commit 04bed6a

Browse files
committed
Reduce dependencies during AOT contribution.
Closes #2136
1 parent ec39a0e commit 04bed6a

File tree

7 files changed

+35
-44
lines changed

7 files changed

+35
-44
lines changed

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/aot/JdbcRepositoryContributor.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.springframework.core.annotation.MergedAnnotation;
2424
import org.springframework.core.annotation.MergedAnnotations;
2525
import org.springframework.data.jdbc.core.JdbcAggregateOperations;
26-
import org.springframework.data.jdbc.core.convert.JdbcConverter;
2726
import org.springframework.data.jdbc.core.convert.QueryMappingConfiguration;
2827
import org.springframework.data.jdbc.core.dialect.JdbcDialect;
2928
import org.springframework.data.jdbc.repository.query.JdbcQueryMethod;
@@ -62,15 +61,15 @@ public class JdbcRepositoryContributor extends RepositoryContributor {
6261
private final @Nullable String jdbcAggregateOperationsRef;
6362

6463
public JdbcRepositoryContributor(AotRepositoryContext repositoryContext, JdbcDialect dialect,
65-
JdbcConverter converter) {
64+
RelationalMappingContext mappingContext) {
6665

6766
super(repositoryContext);
6867

69-
this.mappingContext = converter.getMappingContext();
68+
this.mappingContext = mappingContext;
7069

7170
RepositoryConfigurationSource configurationSource = repositoryContext.getConfigurationSource();
7271

73-
this.queriesFactory = new QueriesFactory(configurationSource, converter, dialect,
72+
this.queriesFactory = new QueriesFactory(configurationSource, dialect, mappingContext,
7473
repositoryContext.getRequiredClassLoader(), ValueExpressionDelegate.create());
7574

7675
jdbcAggregateOperationsRef = configurationSource.getAttribute("jdbcAggregateOperationsRef").orElse(null);
@@ -116,9 +115,7 @@ protected void customizeConstructor(AotRepositoryConstructorBuilder constructorB
116115
queriesFactory.getNamedQueries(), mappingContext);
117116

118117
ReturnedType returnedType = queryMethod.getResultProcessor().getReturnedType();
119-
120118
MergedAnnotation<Query> query = MergedAnnotations.from(method).get(Query.class);
121-
122119
AotQueries aotQueries = queriesFactory.createQueries(getRepositoryInformation(), returnedType, query, queryMethod);
123120

124121
if (queryMethod.isModifyingQuery()) {

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/aot/QueriesFactory.java

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package org.springframework.data.jdbc.repository.aot;
1717

1818
import java.io.IOException;
19-
import java.lang.reflect.Method;
2019
import java.util.ArrayList;
2120
import java.util.List;
2221
import java.util.Objects;
@@ -28,6 +27,9 @@
2827
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
2928
import org.springframework.data.domain.Sort;
3029
import org.springframework.data.jdbc.core.convert.JdbcConverter;
30+
import org.springframework.data.jdbc.core.convert.JdbcCustomConversions;
31+
import org.springframework.data.jdbc.core.convert.JdbcTypeFactory;
32+
import org.springframework.data.jdbc.core.convert.MappingJdbcConverter;
3133
import org.springframework.data.jdbc.core.dialect.JdbcDialect;
3234
import org.springframework.data.jdbc.repository.config.JdbcRepositoryConfigExtension;
3335
import org.springframework.data.jdbc.repository.query.JdbcCountQueryCreator;
@@ -37,11 +39,11 @@
3739
import org.springframework.data.jdbc.repository.query.ParameterBinding;
3840
import org.springframework.data.jdbc.repository.query.ParametrizedQuery;
3941
import org.springframework.data.jdbc.repository.query.Query;
42+
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
4043
import org.springframework.data.relational.repository.query.ParameterMetadataProvider;
4144
import org.springframework.data.relational.repository.query.RelationalParameterAccessor;
4245
import org.springframework.data.relational.repository.query.RelationalParameters;
4346
import org.springframework.data.relational.repository.query.RelationalParametersParameterAccessor;
44-
import org.springframework.data.repository.aot.generate.AotQueryMethodGenerationContext;
4547
import org.springframework.data.repository.config.PropertiesBasedNamedQueriesFactoryBean;
4648
import org.springframework.data.repository.config.RepositoryConfigurationSource;
4749
import org.springframework.data.repository.core.NamedQueries;
@@ -66,11 +68,13 @@ class QueriesFactory {
6668
private final NamedQueries namedQueries;
6769
private final ValueExpressionDelegate delegate;
6870

69-
public QueriesFactory(RepositoryConfigurationSource configurationSource, JdbcConverter converter, JdbcDialect dialect,
70-
ClassLoader classLoader, ValueExpressionDelegate delegate) {
71+
public QueriesFactory(RepositoryConfigurationSource configurationSource, JdbcDialect dialect,
72+
RelationalMappingContext mappingContext, ClassLoader classLoader, ValueExpressionDelegate delegate) {
73+
74+
this.converter = new MappingJdbcConverter(mappingContext, (identifier, path) -> List.of(),
75+
JdbcCustomConversions.of(dialect, List.of()), JdbcTypeFactory.unsupported());
7176

7277
this.namedQueries = getNamedQueries(configurationSource, classLoader);
73-
this.converter = converter;
7478
this.dialect = dialect;
7579
this.delegate = delegate;
7680
}
@@ -198,30 +202,6 @@ private RelationalParametersParameterAccessor getAccessor(JdbcQueryMethod queryM
198202
return PlaceholderAccessor.capture(queryMethod, parameterValues, parameters, bindable);
199203
}
200204

201-
public static @Nullable Class<?> getQueryReturnType(AotQuery query, ReturnedType returnedType,
202-
AotQueryMethodGenerationContext context) {
203-
204-
Method method = context.getMethod();
205-
RepositoryInformation repositoryInformation = context.getRepositoryInformation();
206-
207-
Class<?> methodReturnType = repositoryInformation.getReturnedDomainClass(method);
208-
boolean queryForEntity = repositoryInformation.getDomainType().isAssignableFrom(methodReturnType);
209-
210-
Class<?> result = queryForEntity ? returnedType.getDomainType() : null;
211-
212-
if (returnedType.isProjecting()) {
213-
214-
if (returnedType.getReturnedType().isInterface()) {
215-
216-
return result;
217-
}
218-
219-
return returnedType.getReturnedType();
220-
}
221-
222-
return result;
223-
}
224-
225205
private ValueExpressionQueryRewriter.ParsedQuery parseQuery(String queryString) {
226206

227207
ValueExpressionQueryRewriter rewriter = ValueExpressionQueryRewriter.of(delegate,

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ public JdbcCustomConversions jdbcCustomConversions() {
186186
Dialect dialect = applicationContext.getBeanProvider(Dialect.class).getIfAvailable();
187187

188188
if (dialect == null) {
189-
LOG.warn("No dialect found; CustomConversions will be configured without dialect-specific types.");
189+
LOG.warn("No JdbcDialect bean found; CustomConversions will be configured without dialect-specific types.");
190190
return new JdbcCustomConversions();
191191
}
192192

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtension.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,15 @@
3131
import org.springframework.beans.factory.support.BeanDefinitionValidationException;
3232
import org.springframework.data.jdbc.core.JdbcAggregateOperations;
3333
import org.springframework.data.jdbc.core.convert.JdbcConverter;
34+
import org.springframework.data.jdbc.core.convert.JdbcCustomConversions;
3435
import org.springframework.data.jdbc.core.dialect.JdbcDialect;
3536
import org.springframework.data.jdbc.core.mapping.JdbcMappingContext;
3637
import org.springframework.data.jdbc.repository.aot.JdbcRepositoryContributor;
3738
import org.springframework.data.jdbc.repository.support.JdbcRepositoryFactoryBean;
3839
import org.springframework.data.relational.core.dialect.Dialect;
40+
import org.springframework.data.relational.core.mapping.DefaultNamingStrategy;
41+
import org.springframework.data.relational.core.mapping.NamingStrategy;
42+
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
3943
import org.springframework.data.relational.core.mapping.Table;
4044
import org.springframework.data.repository.config.AotRepositoryContext;
4145
import org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport;
@@ -157,9 +161,22 @@ public static class JdbcRepositoryRegistrationAotProcessor extends RepositoryReg
157161

158162
ConfigurableListableBeanFactory beanFactory = repositoryContext.getBeanFactory();
159163
JdbcDialect dialect = beanFactory.getBean(JdbcDialect.class);
160-
JdbcConverter converter = beanFactory.getBean(JdbcConverter.class);
164+
RelationalMappingContext mappingContext = beanFactory.getBeanProvider(RelationalMappingContext.class)
165+
.getIfAvailable(() -> {
161166

162-
return new JdbcRepositoryContributor(repositoryContext, dialect, converter);
167+
JdbcCustomConversions customConversions = beanFactory.getBeanProvider(JdbcCustomConversions.class)
168+
.getIfAvailable(() -> JdbcCustomConversions.of(dialect, Collections.emptyList()));
169+
170+
NamingStrategy namingStrategy = beanFactory.getBeanProvider(NamingStrategy.class)
171+
.getIfAvailable(DefaultNamingStrategy::new);
172+
173+
JdbcMappingContext context = new JdbcMappingContext(namingStrategy);
174+
context.setSimpleTypeHolder(customConversions.getSimpleTypeHolder());
175+
176+
return context;
177+
});
178+
179+
return new JdbcRepositoryContributor(repositoryContext, dialect, mappingContext);
163180
}
164181

165182
}

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/JdbcQueryCreator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import java.util.Optional;
1919

2020
import org.jspecify.annotations.Nullable;
21-
import org.springframework.data.domain.Pageable;
21+
2222
import org.springframework.data.domain.Sort;
2323
import org.springframework.data.jdbc.core.convert.JdbcConverter;
2424
import org.springframework.data.jdbc.core.convert.SqlGeneratorSource;
@@ -99,7 +99,7 @@ public JdbcQueryCreator(PartTree tree, JdbcConverter converter, Dialect dialect,
9999
RelationalParameterAccessor accessor, ReturnedType returnedType) {
100100
this(converter.getMappingContext(), tree, converter, dialect, queryMethod.getEntityInformation(), accessor,
101101
queryMethod.isSliceQuery(), returnedType, queryMethod.lookupLockAnnotation(),
102-
new SqlGeneratorSource(converter.getMappingContext(), converter, dialect));
102+
new SqlGeneratorSource(converter, dialect));
103103
}
104104

105105
/**

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StatementFactory.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,11 @@
5656
public class StatementFactory {
5757

5858
private final JdbcConverter converter;
59-
private final Dialect dialect;
6059
private final RenderContextFactory renderContextFactory;
6160
private final QueryMapper queryMapper;
6261
private final SqlGeneratorSource sqlGeneratorSource;
6362

6463
public StatementFactory(JdbcConverter converter, Dialect dialect) {
65-
this.dialect = dialect;
6664
this.renderContextFactory = new RenderContextFactory(dialect);
6765
this.converter = converter;
6866
this.queryMapper = new QueryMapper(converter);

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/aot/AotFragmentTestConfigurationSupport.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import org.springframework.core.type.AnnotationMetadata;
4141
import org.springframework.data.expression.ValueExpressionParser;
4242
import org.springframework.data.jdbc.core.JdbcAggregateOperations;
43-
import org.springframework.data.jdbc.core.convert.MappingJdbcConverter;
4443
import org.springframework.data.jdbc.core.dialect.JdbcDialect;
4544
import org.springframework.data.jdbc.core.mapping.JdbcMappingContext;
4645
import org.springframework.data.jdbc.repository.config.EnableJdbcRepositories;
@@ -99,7 +98,7 @@ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
9998
repositoryContext.setBeanFactory(beanFactory);
10099

101100
JdbcRepositoryContributor jdbcRepositoryContributor = new JdbcRepositoryContributor(repositoryContext, dialect,
102-
new MappingJdbcConverter(new JdbcMappingContext(), (identifier, path) -> null));
101+
new JdbcMappingContext());
103102
jdbcRepositoryContributor.contribute(generationContext);
104103

105104
AbstractBeanDefinition aotGeneratedRepository = BeanDefinitionBuilder

0 commit comments

Comments
 (0)