From 4c4ac0c45e3967d5784cd20dda9b0d90ab8a5c2a Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Tue, 21 May 2024 23:54:04 +0200 Subject: [PATCH] GH-614 - Expose factory method to create a (SpringBoot)ApplicationRuntime. We now expose ApplicationRuntime.of(ApplicationContext) to create a SpringBootApplicationRuntime as that's needed a lot in integration tests for runtime and observability components. --- .../modulith/runtime/ApplicationRuntime.java | 16 +++++++++++ .../SpringBootApplicationRuntime.java | 3 +- ...pringModulithRuntimeAutoConfiguration.java | 4 +-- ...icationModulesRuntimeIntegrationTests.java | 5 ++-- ...SpringBootApplicationRuntimeUnitTests.java | 3 +- .../TestSpringBootApplicationRuntime.java | 28 ------------------- 6 files changed, 23 insertions(+), 36 deletions(-) rename spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/{autoconfigure => }/SpringBootApplicationRuntime.java (97%) rename spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/{autoconfigure => }/SpringBootApplicationRuntimeUnitTests.java (92%) delete mode 100644 spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/autoconfigure/TestSpringBootApplicationRuntime.java diff --git a/spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/ApplicationRuntime.java b/spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/ApplicationRuntime.java index 37879cb5..5b43d767 100644 --- a/spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/ApplicationRuntime.java +++ b/spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/ApplicationRuntime.java @@ -15,6 +15,9 @@ */ package org.springframework.modulith.runtime; +import org.springframework.context.ApplicationContext; +import org.springframework.util.Assert; + /** * Abstraction of the application runtime environment. Primarily to keep references to Spring Boot out of the core * observability implementation. @@ -23,6 +26,19 @@ package org.springframework.modulith.runtime; */ public interface ApplicationRuntime { + /** + * Creates a new {@link ApplicationRuntime} for the given {@link ApplicationContext}. + * + * @param context must not be {@literal null}. + * @return will never be {@literal null}. + */ + public static ApplicationRuntime of(ApplicationContext context) { + + Assert.notNull(context, "ApplicationContext must not be null!"); + + return new SpringBootApplicationRuntime(context); + } + /** * Returns the identifier of the application. * diff --git a/spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/autoconfigure/SpringBootApplicationRuntime.java b/spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/SpringBootApplicationRuntime.java similarity index 97% rename from spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/autoconfigure/SpringBootApplicationRuntime.java rename to spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/SpringBootApplicationRuntime.java index 2dc6a112..07ab455a 100644 --- a/spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/autoconfigure/SpringBootApplicationRuntime.java +++ b/spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/SpringBootApplicationRuntime.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.modulith.runtime.autoconfigure; +package org.springframework.modulith.runtime; import java.util.Arrays; import java.util.List; @@ -23,7 +23,6 @@ import java.util.concurrent.ConcurrentHashMap; import org.springframework.boot.autoconfigure.AutoConfigurationPackages; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; -import org.springframework.modulith.runtime.ApplicationRuntime; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; diff --git a/spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/autoconfigure/SpringModulithRuntimeAutoConfiguration.java b/spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/autoconfigure/SpringModulithRuntimeAutoConfiguration.java index 1bf2ecca..424a495c 100644 --- a/spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/autoconfigure/SpringModulithRuntimeAutoConfiguration.java +++ b/spring-modulith-runtime/src/main/java/org/springframework/modulith/runtime/autoconfigure/SpringModulithRuntimeAutoConfiguration.java @@ -57,8 +57,8 @@ class SpringModulithRuntimeAutoConfiguration { @Bean @Role(BeanDefinition.ROLE_INFRASTRUCTURE) @ConditionalOnMissingBean(ApplicationRuntime.class) - static SpringBootApplicationRuntime modulithsApplicationRuntime(ApplicationContext context) { - return new SpringBootApplicationRuntime(context); + static ApplicationRuntime modulithsApplicationRuntime(ApplicationContext context) { + return ApplicationRuntime.of(context); } @Bean diff --git a/spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/ApplicationModulesRuntimeIntegrationTests.java b/spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/ApplicationModulesRuntimeIntegrationTests.java index fb77e0b4..d2111e9d 100644 --- a/spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/ApplicationModulesRuntimeIntegrationTests.java +++ b/spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/ApplicationModulesRuntimeIntegrationTests.java @@ -27,7 +27,6 @@ import java.util.stream.Stream; import org.junit.jupiter.api.Test; import org.springframework.boot.SpringApplication; import org.springframework.modulith.core.ApplicationModules; -import org.springframework.modulith.runtime.autoconfigure.TestSpringBootApplicationRuntime; import org.springframework.modulith.test.TestApplicationModules; /** @@ -43,7 +42,7 @@ public class ApplicationModulesRuntimeIntegrationTests { void detectsTypeInAdditionalPackageAsApplicationType() { var context = SpringApplication.run(SampleApplication.class); - var applicationRuntime = new TestSpringBootApplicationRuntime(context); + var applicationRuntime = ApplicationRuntime.of(context); var runtime = new ApplicationModulesRuntime(() -> modules, applicationRuntime); @@ -55,7 +54,7 @@ public class ApplicationModulesRuntimeIntegrationTests { void onlyLooksUpApplicationModulesOnce() { var context = SpringApplication.run(SampleApplication.class); - var applicationRuntime = new TestSpringBootApplicationRuntime(context); + var applicationRuntime = ApplicationRuntime.of(context); var supplier = new CountingSupplier<>(() -> modules); var runtime = new ApplicationModulesRuntime(supplier, applicationRuntime); diff --git a/spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/autoconfigure/SpringBootApplicationRuntimeUnitTests.java b/spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/SpringBootApplicationRuntimeUnitTests.java similarity index 92% rename from spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/autoconfigure/SpringBootApplicationRuntimeUnitTests.java rename to spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/SpringBootApplicationRuntimeUnitTests.java index 47d22f86..29474409 100644 --- a/spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/autoconfigure/SpringBootApplicationRuntimeUnitTests.java +++ b/spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/SpringBootApplicationRuntimeUnitTests.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.modulith.runtime.autoconfigure; +package org.springframework.modulith.runtime; import static org.assertj.core.api.Assertions.*; @@ -24,6 +24,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.aop.framework.ProxyFactory; import org.springframework.context.ApplicationContext; import org.springframework.modulith.runtime.ApplicationRuntime; +import org.springframework.modulith.runtime.SpringBootApplicationRuntime; /** * Unit tests for {@link SpringBootApplicationRuntime}. diff --git a/spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/autoconfigure/TestSpringBootApplicationRuntime.java b/spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/autoconfigure/TestSpringBootApplicationRuntime.java deleted file mode 100644 index 78e871e0..00000000 --- a/spring-modulith-runtime/src/test/java/org/springframework/modulith/runtime/autoconfigure/TestSpringBootApplicationRuntime.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2024 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.modulith.runtime.autoconfigure; - -import org.springframework.context.ApplicationContext; - -/** - * @author Oliver Drotbohm - */ -public class TestSpringBootApplicationRuntime extends SpringBootApplicationRuntime { - - public TestSpringBootApplicationRuntime(ApplicationContext context) { - super(context); - } -}