GH-169 - More defensive bean definition declaration for the ApplicationStartedEvent listener.

Altered the bean definition to rather only refer to a ListableBeanFactory and only lookup the ApplicationModulesRuntime and ApplicationModuleListeners when the ApplicationStartedEvent is handled.
This commit is contained in:
Oliver Drotbohm
2023-03-23 22:55:25 +01:00
parent 19707dd54a
commit 995d10591b

View File

@@ -15,13 +15,13 @@
*/
package org.springframework.modulith.runtime.autoconfigure;
import java.util.List;
import java.util.concurrent.Future;
import java.util.function.Supplier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.aop.support.AopUtils;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -73,14 +73,13 @@ class SpringModulithRuntimeAutoConfiguration {
}
@Bean
ApplicationListener<ApplicationStartedEvent> applicationModuleInitialzingListener(ApplicationModulesRuntime runtime,
List<ApplicationModuleInitializer> initializers) {
ApplicationListener<ApplicationStartedEvent> applicationModuleInitializingListener(ListableBeanFactory beanFactory) {
return event -> {
var modules = runtime.get();
var modules = beanFactory.getBean(ApplicationModulesRuntime.class).get();
initializers.stream() //
beanFactory.getBeanProvider(ApplicationModuleInitializer.class).stream() //
.sorted(modules.getComparator()) //
.map(it -> LOGGER.isDebugEnabled() ? new LoggingApplicationModuleInitializerAdapter(it, modules) : it)
.forEach(ApplicationModuleInitializer::initialize);