Browse Source

Refine dependency lookup in `JdbcRepositoryFactoryBean.afterPropertiesSet()`.

Removed `@Autowired(required = false)` for JdbcRepositoryFactoryBean.setQueryMappingConfiguration in favor of programmatic lookup.

Signed-off-by: Sergey Korotaev <sergey.evgen.kor2501@gmail.com>
Closes #2070
pull/2076/merge
Sergey Korotaev 6 months ago committed by Mark Paluch
parent
commit
b0d4962b93
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 18
      spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBean.java
  2. 14
      spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBeanUnitTests.java

18
spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBean.java

@ -16,9 +16,7 @@ @@ -16,9 +16,7 @@
package org.springframework.data.jdbc.repository.support;
import java.io.Serializable;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.data.jdbc.core.convert.DataAccessStrategy;
@ -49,6 +47,7 @@ import org.springframework.util.Assert; @@ -49,6 +47,7 @@ import org.springframework.util.Assert;
* @author Hebert Coelho
* @author Chirag Tailor
* @author Mikhail Polivakha
* @author Sergey Korotaev
*/
public class JdbcRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extends Serializable>
extends TransactionalRepositoryFactoryBeanSupport<T, S, ID> implements ApplicationEventPublisherAware {
@ -58,7 +57,7 @@ public class JdbcRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extend @@ -58,7 +57,7 @@ public class JdbcRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extend
private RelationalMappingContext mappingContext;
private JdbcConverter converter;
private DataAccessStrategy dataAccessStrategy;
private QueryMappingConfiguration queryMappingConfiguration = QueryMappingConfiguration.EMPTY;
private QueryMappingConfiguration queryMappingConfiguration;
private NamedParameterJdbcOperations operations;
private EntityCallbacks entityCallbacks;
private Dialect dialect;
@ -124,7 +123,6 @@ public class JdbcRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extend @@ -124,7 +123,6 @@ public class JdbcRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extend
* @param queryMappingConfiguration can be {@literal null}. {@link #afterPropertiesSet()} defaults to
* {@link QueryMappingConfiguration#EMPTY} if {@literal null}.
*/
@Autowired(required = false)
public void setQueryMappingConfiguration(QueryMappingConfiguration queryMappingConfiguration) {
Assert.notNull(queryMappingConfiguration, "QueryMappingConfiguration must not be null");
@ -157,9 +155,14 @@ public class JdbcRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extend @@ -157,9 +155,14 @@ public class JdbcRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extend
@Override
public void afterPropertiesSet() {
Assert.state(this.mappingContext != null, "MappingContext is required and must not be null");
Assert.state(this.converter != null, "RelationalConverter is required and must not be null");
if (mappingContext == null) {
Assert.state(beanFactory != null, "If no MappingContext are set a BeanFactory must be available");
this.mappingContext = beanFactory.getBean(RelationalMappingContext.class);
}
if (this.operations == null) {
Assert.state(beanFactory != null, "If no JdbcOperations are set a BeanFactory must be available");
@ -168,7 +171,10 @@ public class JdbcRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extend @@ -168,7 +171,10 @@ public class JdbcRepositoryFactoryBean<T extends Repository<S, ID>, S, ID extend
}
if (this.queryMappingConfiguration == null) {
this.queryMappingConfiguration = QueryMappingConfiguration.EMPTY;
Assert.state(beanFactory != null, "If no QueryMappingConfiguration are set a BeanFactory must be available");
this.queryMappingConfiguration = beanFactory.getBeanProvider(QueryMappingConfiguration.class)
.getIfAvailable(() -> QueryMappingConfiguration.EMPTY);
}
if (this.dataAccessStrategy == null) {

14
spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBeanUnitTests.java

@ -78,9 +78,14 @@ public class JdbcRepositoryFactoryBeanUnitTests { @@ -78,9 +78,14 @@ public class JdbcRepositoryFactoryBeanUnitTests {
when(beanFactory.getBean(NamedParameterJdbcOperations.class)).thenReturn(mock(NamedParameterJdbcOperations.class));
ObjectProvider<DataAccessStrategy> provider = mock(ObjectProvider.class);
when(beanFactory.getBeanProvider(DataAccessStrategy.class)).thenReturn(provider);
when(provider.getIfAvailable(any()))
ObjectProvider<DataAccessStrategy> dataAccessStrategyObjectProvider = mock(ObjectProvider.class);
ObjectProvider<QueryMappingConfiguration> queryMappingConfigurationObjectProvider = mock(ObjectProvider.class);
when(beanFactory.getBeanProvider(DataAccessStrategy.class)).thenReturn(dataAccessStrategyObjectProvider);
when(beanFactory.getBeanProvider(QueryMappingConfiguration.class)).thenReturn(queryMappingConfigurationObjectProvider);
when(beanFactory.getBean(RelationalMappingContext.class)).thenReturn(mappingContext);
when(dataAccessStrategyObjectProvider.getIfAvailable(any()))
.then((Answer<?>) invocation -> ((Supplier<?>) invocation.getArgument(0)).get());
when(queryMappingConfigurationObjectProvider.getIfAvailable(any()))
.then((Answer<?>) invocation -> ((Supplier<?>) invocation.getArgument(0)).get());
}
@ -114,7 +119,6 @@ public class JdbcRepositoryFactoryBeanUnitTests { @@ -114,7 +119,6 @@ public class JdbcRepositoryFactoryBeanUnitTests {
@Test // DATAJDBC-155
public void afterPropertiesSetDefaultsNullablePropertiesCorrectly() {
factoryBean.setMappingContext(mappingContext);
factoryBean.setConverter(new MappingJdbcConverter(mappingContext, dataAccessStrategy));
factoryBean.setApplicationEventPublisher(publisher);
factoryBean.setBeanFactory(beanFactory);
@ -126,6 +130,8 @@ public class JdbcRepositoryFactoryBeanUnitTests { @@ -126,6 +130,8 @@ public class JdbcRepositoryFactoryBeanUnitTests {
.isInstanceOf(DefaultDataAccessStrategy.class);
assertThat(ReflectionTestUtils.getField(factoryBean, "queryMappingConfiguration"))
.isEqualTo(QueryMappingConfiguration.EMPTY);
assertThat(ReflectionTestUtils.getField(factoryBean, "mappingContext"))
.isEqualTo(mappingContext);
}
private static class DummyEntity {

Loading…
Cancel
Save