15
15
*/
16
16
package org .springframework .modulith .runtime .autoconfigure ;
17
17
18
- import java .util .concurrent .Future ;
19
- import java .util .function .Supplier ;
20
-
21
18
import org .slf4j .Logger ;
22
19
import org .slf4j .LoggerFactory ;
23
20
import org .springframework .aop .support .AopUtils ;
24
- import org .springframework .beans .factory .ListableBeanFactory ;
21
+ import org .springframework .beans .factory .ObjectProvider ;
25
22
import org .springframework .beans .factory .config .BeanDefinition ;
26
23
import org .springframework .boot .autoconfigure .AutoConfiguration ;
24
+ import org .springframework .boot .autoconfigure .condition .ConditionalOnBean ;
27
25
import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingBean ;
28
26
import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingClass ;
29
27
import org .springframework .boot .context .event .ApplicationStartedEvent ;
40
38
import org .springframework .modulith .runtime .ApplicationModulesRuntime ;
41
39
import org .springframework .modulith .runtime .ApplicationRuntime ;
42
40
import org .springframework .util .Assert ;
41
+ import org .springframework .util .function .ThrowingSupplier ;
43
42
44
43
/**
45
44
* Auto-configuration to register a {@link SpringBootApplicationRuntime}, a {@link ApplicationModulesRuntime} and an
@@ -65,23 +64,25 @@ static SpringBootApplicationRuntime modulithsApplicationRuntime(ApplicationConte
65
64
@ ConditionalOnMissingBean
66
65
static ApplicationModulesRuntime modulesRuntime (ApplicationRuntime runtime ) {
67
66
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 ( );
71
70
72
- return new ApplicationModulesRuntime (toSupplier ( modules ) , runtime );
71
+ return new ApplicationModulesRuntime (modules , runtime );
73
72
}
74
73
75
74
@ Bean
76
75
@ Role (BeanDefinition .ROLE_INFRASTRUCTURE )
76
+ @ ConditionalOnBean (ApplicationModuleInitializer .class )
77
77
static ApplicationListener <ApplicationStartedEvent > applicationModuleInitializingListener (
78
- ListableBeanFactory beanFactory ) {
78
+ ObjectProvider <ApplicationModulesRuntime > runtime ,
79
+ ObjectProvider <ApplicationModuleInitializer > initializers ) {
79
80
80
81
return event -> {
81
82
82
- var modules = beanFactory . getBean ( ApplicationModulesRuntime . class ).get ();
83
+ var modules = runtime . getObject ( ).get ();
83
84
84
- beanFactory . getBeanProvider ( ApplicationModuleInitializer . class ) .stream () //
85
+ initializers .stream () //
85
86
.sorted (modules .getComparator ()) //
86
87
.map (it -> LOGGER .isDebugEnabled () ? new LoggingApplicationModuleInitializerAdapter (it , modules ) : it )
87
88
.forEach (ApplicationModuleInitializer ::initialize );
@@ -160,17 +161,6 @@ static ApplicationModules initializeApplicationModules(Class<?> applicationMainC
160
161
}
161
162
}
162
163
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
-
174
164
/**
175
165
* Auto-configuration to react to ArchUnit missing on the runtime classpath.
176
166
*
0 commit comments