From 795d4f262983c3cb22f9527a217f5fc73f624caa Mon Sep 17 00:00:00 2001 From: hongawen <83944980@qq.com> Date: Fri, 26 Jun 2026 05:06:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(mq-starter-core):=20=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=A3=85=E9=85=8D=20+=20spring.factories?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- .../autoconfig/MqCoreAutoConfiguration.java | 33 +++++++++++++++++ .../main/resources/META-INF/spring.factories | 2 ++ .../MqCoreAutoConfigurationTest.java | 35 +++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 mq-starter-core/src/main/java/com/njcn/mq/autoconfig/MqCoreAutoConfiguration.java create mode 100644 mq-starter-core/src/main/resources/META-INF/spring.factories create mode 100644 mq-starter-core/src/test/java/com/njcn/mq/autoconfig/MqCoreAutoConfigurationTest.java diff --git a/mq-starter-core/src/main/java/com/njcn/mq/autoconfig/MqCoreAutoConfiguration.java b/mq-starter-core/src/main/java/com/njcn/mq/autoconfig/MqCoreAutoConfiguration.java new file mode 100644 index 0000000..ca454d7 --- /dev/null +++ b/mq-starter-core/src/main/java/com/njcn/mq/autoconfig/MqCoreAutoConfiguration.java @@ -0,0 +1,33 @@ +package com.njcn.mq.autoconfig; +import com.njcn.mq.container.MqListenerAnnotationBeanPostProcessor; +import com.njcn.mq.container.MqListenerRegistry; +import com.njcn.mq.core.DefaultMqTemplate; +import com.njcn.mq.core.MqTemplate; +import com.njcn.mq.spi.MqDriver; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MqCoreAutoConfiguration { + + @Bean + public static MqListenerAnnotationBeanPostProcessor mqListenerAnnotationBeanPostProcessor() { + return new MqListenerAnnotationBeanPostProcessor(); + } + + @Bean + @ConditionalOnBean(MqDriver.class) + @ConditionalOnMissingBean + public MqTemplate mqTemplate(MqDriver driver) { + return new DefaultMqTemplate(driver); + } + + @Bean + @ConditionalOnBean(MqDriver.class) + @ConditionalOnMissingBean + public MqListenerRegistry mqListenerRegistry(MqDriver driver, MqListenerAnnotationBeanPostProcessor bpp) { + return new MqListenerRegistry(driver, bpp.getEndpoints()); + } +} diff --git a/mq-starter-core/src/main/resources/META-INF/spring.factories b/mq-starter-core/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..8b4edd5 --- /dev/null +++ b/mq-starter-core/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.njcn.mq.autoconfig.MqCoreAutoConfiguration diff --git a/mq-starter-core/src/test/java/com/njcn/mq/autoconfig/MqCoreAutoConfigurationTest.java b/mq-starter-core/src/test/java/com/njcn/mq/autoconfig/MqCoreAutoConfigurationTest.java new file mode 100644 index 0000000..3b2e210 --- /dev/null +++ b/mq-starter-core/src/test/java/com/njcn/mq/autoconfig/MqCoreAutoConfigurationTest.java @@ -0,0 +1,35 @@ +package com.njcn.mq.autoconfig; +import com.njcn.mq.core.MqMessage; +import com.njcn.mq.core.MqTemplate; +import com.njcn.mq.container.MqListenerRegistry; +import com.njcn.mq.spi.MqDriver; +import com.njcn.mq.spi.MqSubscription; +import org.junit.jupiter.api.Test; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import static org.assertj.core.api.Assertions.assertThat; + +class MqCoreAutoConfigurationTest { + @Configuration static class StubDriverConfig { + @Bean MqDriver driver() { return new MqDriver() { + public void send(String t, MqMessage m) {} public void subscribe(MqSubscription s) {} public void stop() {} }; } + } + @Test + void wiresTemplateAndRegistry_whenDriverPresent() { + new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(MqCoreAutoConfiguration.class)) + .withUserConfiguration(StubDriverConfig.class) + .run(ctx -> { + assertThat(ctx).hasSingleBean(MqTemplate.class); + assertThat(ctx).hasSingleBean(MqListenerRegistry.class); + }); + } + @Test + void noTemplate_whenNoDriver() { + new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(MqCoreAutoConfiguration.class)) + .run(ctx -> assertThat(ctx).doesNotHaveBean(MqTemplate.class)); + } +}