diff --git a/pom.xml b/pom.xml
index 3d53c917f4..ad30a806ae 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-relational-parent
- 1.1.0.BUILD-SNAPSHOT
+ 1.1.0.DATAJDBC-293-SNAPSHOT
pom
Spring Data Relational Parent
diff --git a/spring-data-jdbc-distribution/pom.xml b/spring-data-jdbc-distribution/pom.xml
index 1753776a73..3dfb4cbaea 100644
--- a/spring-data-jdbc-distribution/pom.xml
+++ b/spring-data-jdbc-distribution/pom.xml
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-relational-parent
- 1.1.0.BUILD-SNAPSHOT
+ 1.1.0.DATAJDBC-293-SNAPSHOT
../pom.xml
diff --git a/spring-data-jdbc/pom.xml b/spring-data-jdbc/pom.xml
index 9458230173..d5cfa60285 100644
--- a/spring-data-jdbc/pom.xml
+++ b/spring-data-jdbc/pom.xml
@@ -5,7 +5,7 @@
4.0.0
spring-data-jdbc
- 1.1.0.BUILD-SNAPSHOT
+ 1.1.0.DATAJDBC-293-SNAPSHOT
Spring Data JDBC
Spring Data module for JDBC repositories.
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-relational-parent
- 1.1.0.BUILD-SNAPSHOT
+ 1.1.0.DATAJDBC-293-SNAPSHOT
diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtension.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtension.java
index f623d9f85f..9024bba5eb 100644
--- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtension.java
+++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtension.java
@@ -15,27 +15,14 @@
*/
package org.springframework.data.jdbc.repository.config;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
import java.util.Locale;
-import java.util.Optional;
-import java.util.function.Supplier;
import org.springframework.beans.factory.ListableBeanFactory;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
-import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
-import org.springframework.data.jdbc.core.DataAccessStrategy;
import org.springframework.data.jdbc.repository.support.JdbcRepositoryFactoryBean;
import org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport;
import org.springframework.data.repository.config.RepositoryConfigurationSource;
-import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
/**
@@ -87,103 +74,20 @@ public void registerBeansForRoot(BeanDefinitionRegistry registry, RepositoryConf
}
}
- /*
+ /*
* (non-Javadoc)
* @see org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport#postProcess(org.springframework.beans.factory.support.BeanDefinitionBuilder, org.springframework.data.repository.config.RepositoryConfigurationSource)
*/
@Override
public void postProcess(BeanDefinitionBuilder builder, RepositoryConfigurationSource source) {
- resolveReference(builder, source, "jdbcOperationsRef", "jdbcOperations", NamedParameterJdbcOperations.class, true);
- resolveReference(builder, source, "dataAccessStrategyRef", "dataAccessStrategy", DataAccessStrategy.class, false);
- }
-
- private void resolveReference(BeanDefinitionBuilder builder, RepositoryConfigurationSource source,
- String attributeName, String propertyName, Class> classRef, boolean required) {
-
- Optional beanNameRef = source.getAttribute(attributeName).filter(StringUtils::hasText);
-
- String beanName = beanNameRef.orElseGet(() -> determineMatchingBeanName(propertyName, classRef, required));
-
- if (beanName != null) {
- builder.addPropertyReference(propertyName, beanName);
- } else {
- Assert.isTrue(!required,
- "The beanName must not be null when requested as 'required'. Please report this as a bug.");
- }
-
- }
-
- @Nullable
- private String determineMatchingBeanName(String propertyName, Class> classRef, boolean required) {
+ source.getAttribute("jdbcOperationsRef") //
+ .filter(s -> !StringUtils.isEmpty(s)) //
+ .ifPresent(s -> builder.addPropertyReference("jdbcOperations", s));
- if (this.beanFactory == null) {
- return nullOrThrowException(required,
- () -> new NoSuchBeanDefinitionException(classRef, "No BeanFactory available."));
- }
-
- List beanNames = Arrays.asList(beanFactory.getBeanNamesForType(classRef));
-
- if (beanNames.isEmpty()) {
- return nullOrThrowException(required,
- () -> new NoSuchBeanDefinitionException(classRef, String.format("No bean of type %s available", classRef)));
- }
-
- if (beanNames.size() == 1) {
- return beanNames.get(0);
- }
-
- if (!(beanFactory instanceof ConfigurableListableBeanFactory)) {
-
- return nullOrThrowException(required,
- () -> new NoSuchBeanDefinitionException(String.format(
- "BeanFactory does not implement ConfigurableListableBeanFactory when trying to find bean of type %s.",
- classRef)));
- }
-
- List primaryBeanNames = getPrimaryBeanDefinitions(beanNames, (ConfigurableListableBeanFactory) beanFactory);
-
- if (primaryBeanNames.size() == 1) {
- return primaryBeanNames.get(0);
- }
-
- if (primaryBeanNames.size() > 1) {
- throw new NoUniqueBeanDefinitionException(classRef, primaryBeanNames.size(),
- "more than one 'primary' bean found among candidates: " + primaryBeanNames);
- }
-
- for (String beanName : beanNames) {
-
- if (propertyName.equals(beanName)
- || ObjectUtils.containsElement(beanFactory.getAliases(beanName), propertyName)) {
- return beanName;
- }
- }
-
- return nullOrThrowException(required,
- () -> new NoSuchBeanDefinitionException(String.format("No bean of name %s found.", propertyName)));
- }
-
- private static List getPrimaryBeanDefinitions(List beanNames,
- ConfigurableListableBeanFactory beanFactory) {
-
- ArrayList primaryBeanNames = new ArrayList<>();
- for (String name : beanNames) {
-
- if (beanFactory.getBeanDefinition(name).isPrimary()) {
- primaryBeanNames.add(name);
- }
- }
- return primaryBeanNames;
- }
-
- @Nullable
- private static String nullOrThrowException(boolean required, Supplier exception) {
-
- if (required) {
- throw exception.get();
- }
- return null;
+ source.getAttribute("dataAccessStrategyRef") //
+ .filter(s -> !StringUtils.isEmpty(s)) //
+ .ifPresent(s -> builder.addPropertyReference("dataAccessStrategy", s));
}
}
diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBean.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBean.java
index b8ef8f3cc1..ed1481b3c2 100644
--- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBean.java
+++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBean.java
@@ -17,6 +17,7 @@
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;
@@ -47,6 +48,7 @@ public class JdbcRepositoryFactoryBean, S, ID extend
extends TransactionalRepositoryFactoryBeanSupport implements ApplicationEventPublisherAware {
private ApplicationEventPublisher publisher;
+ private BeanFactory beanFactory;
private RelationalMappingContext mappingContext;
private RelationalConverter converter;
private DataAccessStrategy dataAccessStrategy;
@@ -113,7 +115,6 @@ public void setQueryMappingConfiguration(QueryMappingConfiguration queryMappingC
/**
* @param rowMapperMap can be {@literal null}. {@link #afterPropertiesSet()} defaults to {@link RowMapperMap#EMPTY} if
* {@literal null}.
- *
* @deprecated use {@link #setQueryMappingConfiguration(QueryMappingConfiguration)} instead.
*/
@Deprecated
@@ -131,6 +132,14 @@ public void setConverter(RelationalConverter converter) {
this.converter = converter;
}
+ @Override
+ public void setBeanFactory(BeanFactory beanFactory) {
+
+ super.setBeanFactory(beanFactory);
+
+ this.beanFactory = beanFactory;
+ }
+
/*
* (non-Javadoc)
* @see org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport#afterPropertiesSet()
@@ -141,12 +150,8 @@ 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 (dataAccessStrategy == null) {
-
- SqlGeneratorSource sqlGeneratorSource = new SqlGeneratorSource(mappingContext);
- this.dataAccessStrategy = new DefaultDataAccessStrategy(sqlGeneratorSource, mappingContext, converter,
- operations);
- }
+ ensureJdbcOperationsIsInitialized();
+ ensureDataAccessStrategyIsInitialized();
if (queryMappingConfiguration == null) {
this.queryMappingConfiguration = QueryMappingConfiguration.EMPTY;
@@ -154,4 +159,27 @@ public void afterPropertiesSet() {
super.afterPropertiesSet();
}
+
+ private void ensureJdbcOperationsIsInitialized() {
+
+ if (operations != null) {
+ return;
+ }
+
+ operations = beanFactory.getBean(NamedParameterJdbcOperations.class);
+ }
+
+ private void ensureDataAccessStrategyIsInitialized() {
+
+ if (dataAccessStrategy != null) {
+ return;
+ }
+
+ dataAccessStrategy = beanFactory.getBeanProvider(DataAccessStrategy.class).getIfAvailable(() -> {
+
+ SqlGeneratorSource sqlGeneratorSource = new SqlGeneratorSource(mappingContext);
+ return new DefaultDataAccessStrategy(sqlGeneratorSource, mappingContext, converter, operations);
+ });
+ }
+
}
diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mybatis/MyBatisCustomizingNamespaceHsqlIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mybatis/MyBatisCustomizingNamespaceHsqlIntegrationTests.java
index ae0ecb83a1..72fcf593ec 100644
--- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mybatis/MyBatisCustomizingNamespaceHsqlIntegrationTests.java
+++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mybatis/MyBatisCustomizingNamespaceHsqlIntegrationTests.java
@@ -32,6 +32,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.data.jdbc.repository.config.EnableJdbcRepositories;
import org.springframework.data.jdbc.testing.TestConfiguration;
@@ -105,6 +106,7 @@ SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory factory) {
}
@Bean
+ @Primary
MyBatisDataAccessStrategy dataAccessStrategy(SqlSession sqlSession) {
MyBatisDataAccessStrategy strategy = new MyBatisDataAccessStrategy(sqlSession);
diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mybatis/MyBatisHsqlIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mybatis/MyBatisHsqlIntegrationTests.java
index ea397aa227..db310f16f6 100644
--- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mybatis/MyBatisHsqlIntegrationTests.java
+++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/mybatis/MyBatisHsqlIntegrationTests.java
@@ -30,6 +30,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.Primary;
import org.springframework.data.jdbc.core.DataAccessStrategy;
import org.springframework.data.jdbc.repository.config.EnableJdbcRepositories;
import org.springframework.data.jdbc.testing.TestConfiguration;
@@ -88,8 +89,10 @@ SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory factory) {
}
@Bean
+ @Primary
DataAccessStrategy dataAccessStrategy(RelationalMappingContext context, RelationalConverter converter,
SqlSession sqlSession, EmbeddedDatabase db) {
+
return MyBatisDataAccessStrategy.createCombinedAccessStrategy(context, converter,
new NamedParameterJdbcTemplate(db), sqlSession);
}
diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositoriesIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositoriesIntegrationTests.java
index 2ee86b7ff6..6e0dca18fb 100644
--- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositoriesIntegrationTests.java
+++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositoriesIntegrationTests.java
@@ -79,6 +79,7 @@ public class EnableJdbcRepositoriesIntegrationTests {
@BeforeClass
public static void setup() {
+
MAPPER_MAP.setAccessible(true);
OPERATIONS.setAccessible(true);
DATA_ACCESS_STRATEGY.setAccessible(true);
@@ -105,8 +106,9 @@ public void customRowMapperConfigurationGetsPickedUp() {
@Test // DATAJDBC-293
public void jdbcOperationsRef() {
+
NamedParameterJdbcOperations operations = (NamedParameterJdbcOperations) ReflectionUtils.getField(OPERATIONS, factoryBean);
- assertThat(operations).isNotSameAs(defaultDataAccessStrategy).isSameAs(qualifierJdbcOperations);
+ assertThat(operations).isNotSameAs(defaultOperations).isSameAs(qualifierJdbcOperations);
DataAccessStrategy dataAccessStrategy = (DataAccessStrategy) ReflectionUtils.getField(DATA_ACCESS_STRATEGY, factoryBean);
assertThat(dataAccessStrategy).isNotSameAs(defaultDataAccessStrategy).isSameAs(qualifierDataAccessStrategy);
diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtensionUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtensionUnitTests.java
deleted file mode 100644
index 43fec77565..0000000000
--- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtensionUnitTests.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright 2018-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.data.jdbc.repository.config;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
-
-import org.junit.Test;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
-import org.springframework.beans.factory.config.RuntimeBeanReference;
-import org.springframework.beans.factory.support.BeanDefinitionBuilder;
-import org.springframework.beans.factory.support.DefaultListableBeanFactory;
-import org.springframework.context.support.GenericApplicationContext;
-import org.springframework.data.repository.config.RepositoryConfigurationSource;
-import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations;
-
-/**
- * @author Jens Schauder
- */
-public class JdbcRepositoryConfigExtensionUnitTests {
-
- BeanDefinitionBuilder definitionBuilder = BeanDefinitionBuilder.genericBeanDefinition();
- RepositoryConfigurationSource configSource = mock(RepositoryConfigurationSource.class);
- DefaultListableBeanFactory listableBeanFactory = new DefaultListableBeanFactory();
-
- JdbcRepositoryConfigExtension extension = new JdbcRepositoryConfigExtension();
-
- @Test // DATAJDBC-293
- public void exceptionIsThrownOnPostProcessIfNoBeanFactoryIsAvailable() {
-
- assertThatThrownBy( //
- () -> extension.postProcess(definitionBuilder, configSource)) //
- .isInstanceOf(NoSuchBeanDefinitionException.class) //
- .hasMessageContaining("No BeanFactory");
-
- }
-
- @Test // DATAJDBC-293
- public void exceptionIsThrownOnPostProcessIfNoJdbcOperationsBeanIsAvailable() {
-
- extension.registerBeansForRoot(listableBeanFactory, null);
-
- assertThatThrownBy( //
- () -> extension.postProcess(definitionBuilder, configSource)) //
- .isInstanceOf(NoSuchBeanDefinitionException.class) //
- .hasMessageContaining("NamedParameterJdbcOperations"); //
-
- }
-
- @Test // DATAJDBC-293
- public void exceptionIsThrownOnPostProcessIfMultipleJdbcOperationsBeansAreAvailableAndNoConfigurableBeanFactoryAvailable() {
-
- GenericApplicationContext applicationContext = new GenericApplicationContext();
-
- applicationContext.registerBean( //
- "one", //
- NamedParameterJdbcOperations.class, //
- () -> mock(NamedParameterJdbcOperations.class));
- applicationContext.registerBean( //
- "two", //
- NamedParameterJdbcOperations.class, //
- () -> mock(NamedParameterJdbcOperations.class));
-
- applicationContext.refresh();
-
- extension.registerBeansForRoot(applicationContext, null);
-
- assertThatThrownBy( //
- () -> extension.postProcess(definitionBuilder, configSource)) //
- .isInstanceOf(NoSuchBeanDefinitionException.class) //
- .hasMessageContaining("NamedParameterJdbcOperations"); //
-
- }
-
- @Test // DATAJDBC-293
- public void exceptionIsThrownOnPostProcessIfMultiplePrimaryNoJdbcOperationsBeansAreAvailable() {
-
- registerJdbcOperations("one", true);
- registerJdbcOperations("two", true);
-
- extension.registerBeansForRoot(listableBeanFactory, null);
-
- assertThatThrownBy( //
- () -> extension.postProcess(definitionBuilder, configSource)) //
- .isInstanceOf(NoSuchBeanDefinitionException.class) //
- .hasMessageContaining("NamedParameterJdbcOperations"); //
-
- }
-
- @Test // DATAJDBC-293
- public void uniquePrimaryBeanIsUsedOfNamedParameterJdbcOperations() {
-
- registerJdbcOperations("one", false);
- registerJdbcOperations("two", true);
-
- extension.registerBeansForRoot(listableBeanFactory, null);
-
- extension.postProcess(definitionBuilder, configSource);
-
- Object jdbcOperations = definitionBuilder.getBeanDefinition().getPropertyValues().get("jdbcOperations");
-
- assertThat(jdbcOperations) //
- .isInstanceOf(RuntimeBeanReference.class) //
- .extracting(rbr -> ((RuntimeBeanReference) rbr).getBeanName()).contains("two");
- }
-
- @Test // DATAJDBC-293
- public void matchesByNameAsLastResort() {
-
- registerJdbcOperations("jdbcOperations", false);
- registerJdbcOperations("two", false);
-
- extension.registerBeansForRoot(listableBeanFactory, null);
-
- extension.postProcess(definitionBuilder, configSource);
-
- Object jdbcOperations = definitionBuilder.getBeanDefinition().getPropertyValues().get("jdbcOperations");
-
- assertThat(jdbcOperations) //
- .isInstanceOf(RuntimeBeanReference.class) //
- .extracting(rbr -> ((RuntimeBeanReference) rbr).getBeanName()).contains("jdbcOperations");
-
- }
-
- private void registerJdbcOperations(String name, boolean primary) {
-
- listableBeanFactory.registerBeanDefinition(name, BeanDefinitionBuilder.genericBeanDefinition( //
- NamedParameterJdbcOperations.class, //
- () -> mock(NamedParameterJdbcOperations.class)) //
- .applyCustomizers(bd -> bd.setPrimary(primary)) //
- .getBeanDefinition());
- }
-}
diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBeanUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBeanUnitTests.java
index 736ad2a0cd..8f6774f9fd 100644
--- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBeanUnitTests.java
+++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactoryBeanUnitTests.java
@@ -21,9 +21,14 @@
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Answers;
import org.mockito.Mock;
+import org.mockito.invocation.InvocationOnMock;
import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.stubbing.Answer;
import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.ListableBeanFactory;
+import org.springframework.beans.factory.ObjectProvider;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.annotation.Id;
import org.springframework.data.jdbc.core.DataAccessStrategy;
@@ -33,8 +38,11 @@
import org.springframework.data.relational.core.conversion.BasicRelationalConverter;
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
import org.springframework.data.repository.CrudRepository;
+import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations;
import org.springframework.test.util.ReflectionTestUtils;
+import java.util.function.Supplier;
+
/**
* Tests the dependency injection for {@link JdbcRepositoryFactoryBean}.
*
@@ -44,7 +52,6 @@
* @author Oliver Gierke
* @author Mark Paluch
* @author Evgeni Dimitrov
- *
*/
@RunWith(MockitoJUnitRunner.class)
public class JdbcRepositoryFactoryBeanUnitTests {
@@ -53,6 +60,7 @@ public class JdbcRepositoryFactoryBeanUnitTests {
@Mock DataAccessStrategy dataAccessStrategy;
@Mock ApplicationEventPublisher publisher;
+ @Mock ListableBeanFactory beanFactory;
RelationalMappingContext mappingContext;
@@ -63,6 +71,14 @@ public void setUp() {
// Setup standard configuration
factoryBean = new JdbcRepositoryFactoryBean<>(DummyEntityRepository.class);
+
+
+ when(beanFactory.getBean(NamedParameterJdbcOperations.class)).thenReturn(mock(NamedParameterJdbcOperations.class));
+
+ ObjectProvider provider = mock(ObjectProvider.class);
+ when(beanFactory.getBeanProvider(DataAccessStrategy.class)).thenReturn(provider);
+ when(provider.getIfAvailable(any()))
+ .then((Answer) invocation -> ((Supplier)invocation.getArgument(0)).get());
}
@Test
@@ -72,6 +88,7 @@ public void setsUpBasicInstanceCorrectly() {
factoryBean.setMappingContext(mappingContext);
factoryBean.setConverter(new BasicRelationalConverter(mappingContext));
factoryBean.setApplicationEventPublisher(publisher);
+ factoryBean.setBeanFactory(beanFactory);
factoryBean.afterPropertiesSet();
assertThat(factoryBean.getObject()).isNotNull();
@@ -88,6 +105,7 @@ public void afterPropertiesThowsExceptionWhenNoMappingContextSet() {
factoryBean.setMappingContext(null);
factoryBean.setApplicationEventPublisher(publisher);
+ factoryBean.setBeanFactory(beanFactory);
factoryBean.afterPropertiesSet();
}
@@ -97,12 +115,14 @@ public void afterPropertiesSetDefaultsNullablePropertiesCorrectly() {
factoryBean.setMappingContext(mappingContext);
factoryBean.setConverter(new BasicRelationalConverter(mappingContext));
factoryBean.setApplicationEventPublisher(publisher);
+ factoryBean.setBeanFactory(beanFactory);
factoryBean.afterPropertiesSet();
assertThat(factoryBean.getObject()).isNotNull();
assertThat(ReflectionTestUtils.getField(factoryBean, "dataAccessStrategy"))
.isInstanceOf(DefaultDataAccessStrategy.class);
- assertThat(ReflectionTestUtils.getField(factoryBean, "queryMappingConfiguration")).isEqualTo(QueryMappingConfiguration.EMPTY);
+ assertThat(ReflectionTestUtils.getField(factoryBean, "queryMappingConfiguration"))
+ .isEqualTo(QueryMappingConfiguration.EMPTY);
}
private static class DummyEntity {
diff --git a/spring-data-relational/pom.xml b/spring-data-relational/pom.xml
index 11e7db737c..8ff5c1279b 100644
--- a/spring-data-relational/pom.xml
+++ b/spring-data-relational/pom.xml
@@ -5,7 +5,7 @@
4.0.0
spring-data-relational
- 1.1.0.BUILD-SNAPSHOT
+ 1.1.0.DATAJDBC-293-SNAPSHOT
Spring Data Relational
Spring Data Relational support
@@ -13,7 +13,7 @@
org.springframework.data
spring-data-relational-parent
- 1.1.0.BUILD-SNAPSHOT
+ 1.1.0.DATAJDBC-293-SNAPSHOT