1515 */
1616package org .springframework .modulith .runtime .autoconfigure ;
1717
18- import java .util .concurrent .Future ;
19- import java .util .function .Supplier ;
20-
2118import org .slf4j .Logger ;
2219import org .slf4j .LoggerFactory ;
2320import org .springframework .aop .support .AopUtils ;
24- import org .springframework .beans .factory .ListableBeanFactory ;
21+ import org .springframework .beans .factory .ObjectProvider ;
2522import org .springframework .beans .factory .config .BeanDefinition ;
2623import org .springframework .boot .autoconfigure .AutoConfiguration ;
24+ import org .springframework .boot .autoconfigure .condition .ConditionalOnBean ;
2725import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingBean ;
2826import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingClass ;
2927import org .springframework .boot .context .event .ApplicationStartedEvent ;
4038import org .springframework .modulith .runtime .ApplicationModulesRuntime ;
4139import org .springframework .modulith .runtime .ApplicationRuntime ;
4240import org .springframework .util .Assert ;
41+ import org .springframework .util .function .ThrowingSupplier ;
4342
4443/**
4544 * Auto-configuration to register a {@link SpringBootApplicationRuntime}, a {@link ApplicationModulesRuntime} and an
@@ -65,23 +64,25 @@ static SpringBootApplicationRuntime modulithsApplicationRuntime(ApplicationConte
6564 @ ConditionalOnMissingBean
6665 static ApplicationModulesRuntime modulesRuntime (ApplicationRuntime runtime ) {
6766
68- var mainClass = runtime . getMainApplicationClass ();
69- var modules = EXECUTOR
70- .submit (() -> ApplicationModulesBootstrap . initializeApplicationModules ( mainClass ) );
67+ ThrowingSupplier < ApplicationModules > modules = () -> EXECUTOR
68+ . submit (() -> ApplicationModulesBootstrap . initializeApplicationModules ( runtime . getMainApplicationClass ()))
69+ .get ( );
7170
72- return new ApplicationModulesRuntime (toSupplier ( modules ) , runtime );
71+ return new ApplicationModulesRuntime (modules , runtime );
7372 }
7473
7574 @ Bean
7675 @ Role (BeanDefinition .ROLE_INFRASTRUCTURE )
76+ @ ConditionalOnBean (ApplicationModuleInitializer .class )
7777 static ApplicationListener <ApplicationStartedEvent > applicationModuleInitializingListener (
78- ListableBeanFactory beanFactory ) {
78+ ObjectProvider <ApplicationModulesRuntime > runtime ,
79+ ObjectProvider <ApplicationModuleInitializer > initializers ) {
7980
8081 return event -> {
8182
82- var modules = beanFactory . getBean ( ApplicationModulesRuntime . class ).get ();
83+ var modules = runtime . getObject ( ).get ();
8384
84- beanFactory . getBeanProvider ( ApplicationModuleInitializer . class ) .stream () //
85+ initializers .stream () //
8586 .sorted (modules .getComparator ()) //
8687 .map (it -> LOGGER .isDebugEnabled () ? new LoggingApplicationModuleInitializerAdapter (it , modules ) : it )
8788 .forEach (ApplicationModuleInitializer ::initialize );
@@ -160,17 +161,6 @@ static ApplicationModules initializeApplicationModules(Class<?> applicationMainC
160161 }
161162 }
162163
163- private static Supplier <ApplicationModules > toSupplier (Future <ApplicationModules > modules ) {
164-
165- return () -> {
166- try {
167- return modules .get ();
168- } catch (Exception o_O ) {
169- throw new RuntimeException (o_O );
170- }
171- };
172- }
173-
174164 /**
175165 * Auto-configuration to react to ArchUnit missing on the runtime classpath.
176166 *
0 commit comments