Find annotation without initializing factory beans

Closes gh-28977
This commit is contained in:
Andy Wilkinson 2021-12-10 14:38:08 +00:00 committed by Stephane Nicoll
parent 5d0206320a
commit 2fec06ac7e
2 changed files with 17 additions and 5 deletions

View File

@ -33,7 +33,7 @@ class AnnotationDependsOnDatabaseInitializationDetector implements DependsOnData
public Set<String> detect(ConfigurableListableBeanFactory beanFactory) { public Set<String> detect(ConfigurableListableBeanFactory beanFactory) {
Set<String> dependentBeans = new HashSet<>(); Set<String> dependentBeans = new HashSet<>();
for (String beanName : beanFactory.getBeanDefinitionNames()) { for (String beanName : beanFactory.getBeanDefinitionNames()) {
if (beanFactory.findAnnotationOnBean(beanName, DependsOnDatabaseInitialization.class) != null) { if (beanFactory.findAnnotationOnBean(beanName, DependsOnDatabaseInitialization.class, false) != null) {
dependentBeans.add(beanName); dependentBeans.add(beanName);
} }
} }

View File

@ -39,11 +39,13 @@ import static org.assertj.core.api.Assertions.assertThat;
class AbstractDataSourceInitializerDependencyConfigurationTests { class AbstractDataSourceInitializerDependencyConfigurationTests {
@Test @Test
void beanThatDependsOnDatabaseInitializationDependsOnAbstractDataSourceInitializerBeans() { void beansThatDependOnDatabaseInitializationDependOnAbstractDataSourceInitializerBeans() {
try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext( try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
TestConfiguration.class)) { TestConfiguration.class)) {
assertThat(context.getBeanFactory().getBeanDefinition("dependsOnDataSourceInitialization").getDependsOn()) assertThat(context.getBeanFactory().getBeanDefinition("factoryMethodDependsOnDatabaseInitialization")
.contains("initializer"); .getDependsOn()).contains("initializer");
assertThat(context.getBeanFactory().getBeanDefinition("beanClassDependsOnDatabaseInitialization")
.getDependsOn()).contains("initializer");
} }
} }
@ -58,10 +60,15 @@ class AbstractDataSourceInitializerDependencyConfigurationTests {
@Bean @Bean
@DependsOnDatabaseInitialization @DependsOnDatabaseInitialization
String dependsOnDataSourceInitialization() { String factoryMethodDependsOnDatabaseInitialization() {
return "test"; return "test";
} }
@Bean
DatabaseInitializationDependent beanClassDependsOnDatabaseInitialization() {
return new DatabaseInitializationDependent();
}
@Bean @Bean
AbstractDataSourceInitializer initializer(DataSource dataSource, ResourceLoader resourceLoader) { AbstractDataSourceInitializer initializer(DataSource dataSource, ResourceLoader resourceLoader) {
return new AbstractDataSourceInitializer(dataSource, resourceLoader) { return new AbstractDataSourceInitializer(dataSource, resourceLoader) {
@ -81,4 +88,9 @@ class AbstractDataSourceInitializerDependencyConfigurationTests {
} }
@DependsOnDatabaseInitialization
static class DatabaseInitializationDependent {
}
} }