Skip to content

Commit 9a22a9a

Browse files
committed
Polishing.
Reformat code. Simplify flow. Add ticket reference to test. See #3287 Original pull request: #3219
1 parent a0f3381 commit 9a22a9a

File tree

2 files changed

+43
-33
lines changed

2 files changed

+43
-33
lines changed

src/main/java/org/springframework/data/repository/config/RepositoryConfigurationDelegate.java

+33-24
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,28 @@
1515
*/
1616
package org.springframework.data.repository.config;
1717

18+
import java.lang.reflect.TypeVariable;
19+
import java.util.ArrayList;
20+
import java.util.Arrays;
21+
import java.util.Collection;
22+
import java.util.HashMap;
23+
import java.util.List;
24+
import java.util.Map;
25+
import java.util.stream.Collectors;
26+
1827
import org.apache.commons.logging.Log;
1928
import org.apache.commons.logging.LogFactory;
29+
2030
import org.springframework.beans.factory.config.BeanDefinition;
2131
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
2232
import org.springframework.beans.factory.config.DependencyDescriptor;
2333
import org.springframework.beans.factory.parsing.BeanComponentDefinition;
24-
import org.springframework.beans.factory.support.*;
34+
import org.springframework.beans.factory.support.AutowireCandidateResolver;
35+
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
36+
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
37+
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
38+
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
39+
import org.springframework.beans.factory.support.RootBeanDefinition;
2540
import org.springframework.context.annotation.ContextAnnotationAutowireCandidateResolver;
2641
import org.springframework.context.support.GenericApplicationContext;
2742
import org.springframework.core.ResolvableType;
@@ -43,10 +58,6 @@
4358
import org.springframework.util.ClassUtils;
4459
import org.springframework.util.StopWatch;
4560

46-
import java.lang.reflect.TypeVariable;
47-
import java.util.*;
48-
import java.util.stream.Collectors;
49-
5061
/**
5162
* Delegate for configuration integration to reuse the general way of detecting repositories. Customization is done by
5263
* providing a configuration format specific {@link RepositoryConfigurationSource} (currently either XML or annotations
@@ -65,6 +76,9 @@ public class RepositoryConfigurationDelegate {
6576
private static final String MULTIPLE_MODULES = "Multiple Spring Data modules found, entering strict repository configuration mode";
6677
private static final String NON_DEFAULT_AUTOWIRE_CANDIDATE_RESOLVER = "Non-default AutowireCandidateResolver (%s) detected. Skipping the registration of LazyRepositoryInjectionPointResolver. Lazy repository injection will not be working";
6778

79+
private static final List<Class<?>> DEFAULT_AUTOWIRE_CANDIDATE_RESOLVERS = List
80+
.of(ContextAnnotationAutowireCandidateResolver.class, LazyRepositoryInjectionPointResolver.class);
81+
6882
private static final Log logger = LogFactory.getLog(RepositoryConfigurationDelegate.class);
6983

7084
private final RepositoryConfigurationSource configurationSource;
@@ -82,7 +96,7 @@ public class RepositoryConfigurationDelegate {
8296
* @param environment must not be {@literal null}.
8397
*/
8498
public RepositoryConfigurationDelegate(RepositoryConfigurationSource configurationSource,
85-
ResourceLoader resourceLoader, Environment environment) {
99+
ResourceLoader resourceLoader, Environment environment) {
86100

87101
this.isXml = configurationSource instanceof XmlRepositoryConfigurationSource;
88102
boolean isAnnotation = configurationSource instanceof AnnotationRepositoryConfigurationSource;
@@ -107,7 +121,7 @@ public RepositoryConfigurationDelegate(RepositoryConfigurationSource configurati
107121
* {@link Environment}.
108122
*/
109123
private static Environment defaultEnvironment(@Nullable Environment environment,
110-
@Nullable ResourceLoader resourceLoader) {
124+
@Nullable ResourceLoader resourceLoader) {
111125

112126
if (environment != null) {
113127
return environment;
@@ -127,7 +141,7 @@ private static Environment defaultEnvironment(@Nullable Environment environment,
127141
* @see org.springframework.beans.factory.support.BeanDefinitionRegistry
128142
*/
129143
public List<BeanComponentDefinition> registerRepositoriesIn(BeanDefinitionRegistry registry,
130-
RepositoryConfigurationExtension extension) {
144+
RepositoryConfigurationExtension extension) {
131145

132146
if (logger.isInfoEnabled()) {
133147
logger.info(LogMessage.format("Bootstrapping Spring Data %s repositories in %s mode.", //
@@ -213,7 +227,7 @@ public List<BeanComponentDefinition> registerRepositoriesIn(BeanDefinitionRegist
213227
}
214228

215229
private void registerAotComponents(BeanDefinitionRegistry registry, RepositoryConfigurationExtension extension,
216-
Map<String, RepositoryConfigurationAdapter<?>> metadataByRepositoryBeanName) {
230+
Map<String, RepositoryConfigurationAdapter<?>> metadataByRepositoryBeanName) {
217231

218232
BeanDefinitionBuilder repositoryAotProcessor = BeanDefinitionBuilder
219233
.rootBeanDefinition(extension.getRepositoryAotProcessor()).setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
@@ -236,37 +250,32 @@ private void registerAotComponents(BeanDefinitionRegistry registry, RepositoryCo
236250
* @param registry must not be {@literal null}.
237251
*/
238252
private static void potentiallyLazifyRepositories(Map<String, RepositoryConfiguration<?>> configurations,
239-
BeanDefinitionRegistry registry, BootstrapMode mode) {
253+
BeanDefinitionRegistry registry, BootstrapMode mode) {
240254

241-
if (!DefaultListableBeanFactory.class.isInstance(registry) || BootstrapMode.DEFAULT.equals(mode)) {
255+
if (!(registry instanceof DefaultListableBeanFactory beanFactory) || BootstrapMode.DEFAULT.equals(mode)) {
242256
return;
243257
}
244258

245-
DefaultListableBeanFactory beanFactory = DefaultListableBeanFactory.class.cast(registry);
246259
AutowireCandidateResolver resolver = beanFactory.getAutowireCandidateResolver();
247260

248-
if (!Arrays.asList(ContextAnnotationAutowireCandidateResolver.class, LazyRepositoryInjectionPointResolver.class)
249-
.contains(resolver.getClass())) {
261+
if (!DEFAULT_AUTOWIRE_CANDIDATE_RESOLVERS.contains(resolver.getClass())) {
250262

251263
logger.warn(LogMessage.format(NON_DEFAULT_AUTOWIRE_CANDIDATE_RESOLVER, resolver.getClass().getName()));
252-
253264
return;
254265
}
255266

256-
AutowireCandidateResolver newResolver = LazyRepositoryInjectionPointResolver.class.isInstance(resolver) //
257-
? LazyRepositoryInjectionPointResolver.class.cast(resolver).withAdditionalConfigurations(configurations) //
267+
AutowireCandidateResolver newResolver = resolver instanceof LazyRepositoryInjectionPointResolver lazy //
268+
? lazy.withAdditionalConfigurations(configurations) //
258269
: new LazyRepositoryInjectionPointResolver(configurations);
259270

260271
beanFactory.setAutowireCandidateResolver(newResolver);
261272

262-
if (mode.equals(BootstrapMode.DEFERRED)) {
273+
if (mode.equals(BootstrapMode.DEFERRED)
274+
&& !beanFactory.containsBean(DeferredRepositoryInitializationListener.class.getName())) {
263275

264276
logger.debug("Registering deferred repository initialization listener.");
265-
266-
if (!beanFactory.containsBean(DeferredRepositoryInitializationListener.class.getName())) {
267-
beanFactory.registerSingleton(DeferredRepositoryInitializationListener.class.getName(),
268-
new DeferredRepositoryInitializationListener(beanFactory));
269-
}
277+
beanFactory.registerSingleton(DeferredRepositoryInitializationListener.class.getName(),
278+
new DeferredRepositoryInitializationListener(beanFactory));
270279
}
271280
}
272281

@@ -276,7 +285,7 @@ private static void potentiallyLazifyRepositories(Map<String, RepositoryConfigur
276285
* scanning.
277286
*
278287
* @return {@literal true} if multiple data store repository implementations are present in the application. This
279-
* typically means an Spring application is using more than 1 type of data store.
288+
* typically means a Spring application is using more than 1 type of data store.
280289
*/
281290
private boolean multipleStoresDetected() {
282291

src/test/java/org/springframework/data/repository/config/RepositoryConfigurationDelegateUnitTests.java

+10-9
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,20 @@
1515
*/
1616
package org.springframework.data.repository.config;
1717

18+
import static org.assertj.core.api.Assertions.*;
19+
20+
import java.lang.reflect.TypeVariable;
21+
import java.util.List;
22+
import java.util.Optional;
23+
import java.util.UUID;
24+
1825
import org.junit.jupiter.api.Test;
1926
import org.junit.jupiter.api.extension.ExtendWith;
2027
import org.mockito.Mockito;
2128
import org.mockito.junit.jupiter.MockitoExtension;
2229
import org.mockito.junit.jupiter.MockitoSettings;
2330
import org.mockito.quality.Strictness;
31+
2432
import org.springframework.aop.framework.Advised;
2533
import org.springframework.aot.hint.RuntimeHints;
2634
import org.springframework.beans.factory.ListableBeanFactory;
@@ -52,13 +60,6 @@
5260
import org.springframework.data.repository.sample.AddressRepositoryClient;
5361
import org.springframework.data.repository.sample.ProductRepository;
5462

55-
import java.lang.reflect.TypeVariable;
56-
import java.util.List;
57-
import java.util.Optional;
58-
import java.util.UUID;
59-
60-
import static org.assertj.core.api.Assertions.assertThat;
61-
6263
/**
6364
* Unit tests for {@link RepositoryConfigurationDelegate}.
6465
*
@@ -112,8 +113,8 @@ void registersDeferredRepositoryInitializationListener() {
112113
assertThat(beanFactory.getBeanNamesForType(DeferredRepositoryInitializationListener.class)).isNotEmpty();
113114
}
114115

115-
@Test
116-
void registersMultiDeferredRepositoryInitializationListener() {
116+
@Test // GH-3287
117+
void registersOneDeferredRepositoryInitializationListener() {
117118

118119
var beanFactory = assertLazyRepositoryBeanSetup(DeferredConfig.class, OtherDeferredConfig.class);
119120

0 commit comments

Comments
 (0)