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