feat(mq-starter-core): 自动装配 + spring.factories

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-26 05:06:36 +08:00
parent 016590099a
commit 795d4f2629
3 changed files with 70 additions and 0 deletions

View File

@@ -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());
}
}

View File

@@ -0,0 +1,2 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.njcn.mq.autoconfig.MqCoreAutoConfiguration

View File

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