feat(mq-starter-core): 自动装配 + spring.factories
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||||
|
com.njcn.mq.autoconfig.MqCoreAutoConfiguration
|
||||||
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user