Skip to content

Commit 4eb458f

Browse files
committed
Prevent early resolution of factory beans
This commit updates DatabaseInitializationDependencyConfigurer so that it does not inject the Environment anymore. Doing so in such a low-level callback can lead to early resolution of factory beans. Rather, this commit uses the EnvironmentAware callback that short-circuit dependency resolution. Closes gh-29475
1 parent cdd4795 commit 4eb458f

File tree

1 file changed

+9
-17
lines changed

1 file changed

+9
-17
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/sql/init/dependency/DatabaseInitializationDependencyConfigurer.java

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2021 the original author or authors.
2+
* Copyright 2012-2022 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -34,6 +34,7 @@
3434
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
3535
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
3636
import org.springframework.boot.util.Instantiator;
37+
import org.springframework.context.EnvironmentAware;
3738
import org.springframework.context.annotation.Import;
3839
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
3940
import org.springframework.core.Ordered;
@@ -63,36 +64,27 @@
6364
*/
6465
public class DatabaseInitializationDependencyConfigurer implements ImportBeanDefinitionRegistrar {
6566

66-
private final Environment environment;
67-
68-
DatabaseInitializationDependencyConfigurer(Environment environment) {
69-
this.environment = environment;
70-
}
71-
7267
@Override
7368
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
7469
String name = DependsOnDatabaseInitializationPostProcessor.class.getName();
7570
if (!registry.containsBeanDefinition(name)) {
76-
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(
77-
DependsOnDatabaseInitializationPostProcessor.class,
78-
this::createDependsOnDatabaseInitializationPostProcessor);
71+
BeanDefinitionBuilder builder = BeanDefinitionBuilder
72+
.genericBeanDefinition(DependsOnDatabaseInitializationPostProcessor.class);
7973
registry.registerBeanDefinition(name, builder.getBeanDefinition());
8074
}
8175
}
8276

83-
private DependsOnDatabaseInitializationPostProcessor createDependsOnDatabaseInitializationPostProcessor() {
84-
return new DependsOnDatabaseInitializationPostProcessor(this.environment);
85-
}
86-
8777
/**
8878
* {@link BeanFactoryPostProcessor} used to configure database initialization
8979
* dependency relationships.
9080
*/
91-
static class DependsOnDatabaseInitializationPostProcessor implements BeanFactoryPostProcessor, Ordered {
81+
static class DependsOnDatabaseInitializationPostProcessor
82+
implements BeanFactoryPostProcessor, EnvironmentAware, Ordered {
9283

93-
private final Environment environment;
84+
private Environment environment;
9485

95-
DependsOnDatabaseInitializationPostProcessor(Environment environment) {
86+
@Override
87+
public void setEnvironment(Environment environment) {
9688
this.environment = environment;
9789
}
9890

0 commit comments

Comments
 (0)