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)); + } +}