Skip to content

Commit f753c31

Browse files
committed
Polish "Set up MongoClient beans' dependencies by type rather than name"
See gh-16627
1 parent 39f1039 commit f753c31

File tree

4 files changed

+51
-19
lines changed

4 files changed

+51
-19
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/mongo/MongoClientDependsOnBeanFactoryPostProcessor.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,25 @@
3636
@Order(Ordered.LOWEST_PRECEDENCE)
3737
public class MongoClientDependsOnBeanFactoryPostProcessor extends AbstractDependsOnBeanFactoryPostProcessor {
3838

39+
/**
40+
* Creates a new {@code MongoClientDependsOnBeanFactoryPostProcessor} that will set up
41+
* dependencies upon beans with the given names.
42+
* @param dependsOn names of the beans to depend upon
43+
* @deprecated since 2.1.7 in favor of
44+
* {@link #MongoClientDependsOnBeanFactoryPostProcessor}
45+
*/
46+
@Deprecated
3947
public MongoClientDependsOnBeanFactoryPostProcessor(String... dependsOn) {
4048
super(MongoClient.class, MongoClientFactoryBean.class, dependsOn);
4149
}
4250

51+
/**
52+
* Creates a new {@code MongoClientDependsOnBeanFactoryPostProcessor} that will set up
53+
* dependencies upon beans with the given types.
54+
* @param dependsOn types of the beans to depend upon
55+
*/
56+
public MongoClientDependsOnBeanFactoryPostProcessor(Class<?>... dependsOn) {
57+
super(MongoClient.class, MongoClientFactoryBean.class, dependsOn);
58+
}
59+
4360
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/mongo/ReactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,25 @@
3737
public class ReactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor
3838
extends AbstractDependsOnBeanFactoryPostProcessor {
3939

40+
/**
41+
* Creates a new {@code ReactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor}
42+
* that will set up dependencies upon beans with the given names.
43+
* @param dependsOn names of the beans to depend upon
44+
* @deprecated since 2.1.7 in favor of
45+
* {@link #ReactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor}
46+
*/
47+
@Deprecated
4048
public ReactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor(String... dependsOn) {
4149
super(MongoClient.class, ReactiveMongoClientFactoryBean.class, dependsOn);
4250
}
4351

52+
/**
53+
* Creates a new {@code ReactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor}
54+
* that will set up dependencies upon beans with the given types.
55+
* @param dependsOn types of the beans to depend upon
56+
*/
57+
public ReactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor(Class<?>... dependsOn) {
58+
super(MongoClient.class, ReactiveMongoClientFactoryBean.class, dependsOn);
59+
}
60+
4461
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/embedded/EmbeddedMongoAutoConfiguration.java

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,6 @@
4848
import org.slf4j.Logger;
4949
import org.slf4j.LoggerFactory;
5050

51-
import org.springframework.beans.factory.BeanFactoryUtils;
52-
import org.springframework.beans.factory.ListableBeanFactory;
5351
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
5452
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
5553
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -218,32 +216,26 @@ private ArtifactStoreBuilder getArtifactStore(Logger logger) {
218216
*/
219217
@Configuration
220218
@ConditionalOnClass({ MongoClient.class, MongoClientFactoryBean.class })
221-
protected static class EmbeddedMongoDependencyConfiguration {
219+
protected static class EmbeddedMongoDependencyConfiguration extends MongoClientDependsOnBeanFactoryPostProcessor {
222220

223-
@Bean
224-
public MongoClientDependsOnBeanFactoryPostProcessor mongoClientDependsOnBeanFactoryPostProcessor(
225-
ListableBeanFactory listableBeanFactory) {
226-
String[] mongoExecutableBeanNames = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(listableBeanFactory,
227-
MongodExecutable.class);
228-
return new MongoClientDependsOnBeanFactoryPostProcessor(mongoExecutableBeanNames);
221+
EmbeddedMongoDependencyConfiguration() {
222+
super(MongodExecutable.class);
229223
}
230224

231225
}
232226

233227
/**
234-
* Additional configuration to ensure that {@link MongoClient} beans depend on any
228+
* Additional configuration to ensure that
229+
* {@link com.mongodb.reactivestreams.client.MongoClient} beans depend on any
235230
* {@link MongodExecutable} beans.
236231
*/
237232
@Configuration
238233
@ConditionalOnClass({ com.mongodb.reactivestreams.client.MongoClient.class, ReactiveMongoClientFactoryBean.class })
239-
protected static class EmbeddedReactiveMongoDependencyConfiguration {
234+
protected static class EmbeddedReactiveMongoDependencyConfiguration
235+
extends ReactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor {
240236

241-
@Bean
242-
public ReactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor reactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor(
243-
ListableBeanFactory listableBeanFactory) {
244-
String[] mongoExecutableBeanNames = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(listableBeanFactory,
245-
MongodExecutable.class);
246-
return new ReactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor(mongoExecutableBeanNames);
237+
EmbeddedReactiveMongoDependencyConfiguration() {
238+
super(MongodExecutable.class);
247239
}
248240

249241
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/embedded/EmbeddedMongoAutoConfigurationTests.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.io.File;
2020
import java.util.EnumSet;
21+
import java.util.Map;
2122
import java.util.stream.Collectors;
2223

2324
import com.mongodb.MongoClient;
@@ -33,6 +34,7 @@
3334
import org.junit.Test;
3435

3536
import org.springframework.beans.factory.annotation.Value;
37+
import org.springframework.beans.factory.config.BeanDefinition;
3638
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
3739
import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
3840
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
@@ -45,7 +47,6 @@
4547
import org.springframework.util.FileSystemUtils;
4648

4749
import static org.assertj.core.api.Assertions.assertThat;
48-
import static org.assertj.core.api.Assertions.assertThatCode;
4950

5051
/**
5152
* Tests for {@link EmbeddedMongoAutoConfiguration}.
@@ -177,7 +178,12 @@ public void shutdownHookIsNotRegistered() {
177178

178179
@Test
179180
public void customMongoServerConfiguration() {
180-
assertThatCode(() -> load(CustomMongoConfiguration.class)).doesNotThrowAnyException();
181+
load(CustomMongoConfiguration.class);
182+
Map<String, MongoClient> mongoClients = this.context.getBeansOfType(MongoClient.class);
183+
for (String mongoClientBeanName : mongoClients.keySet()) {
184+
BeanDefinition beanDefinition = this.context.getBeanFactory().getBeanDefinition(mongoClientBeanName);
185+
assertThat(beanDefinition.getDependsOn()).contains("customMongoServer");
186+
}
181187
}
182188

183189
private void assertVersionConfiguration(String configuredVersion, String expectedVersion) {

0 commit comments

Comments
 (0)