Skip to content

Commit 0ed9085

Browse files
committed
Polish "Apply container customizer bean to AMQP MessageListenerContainer"
See gh-27625
1 parent 774941e commit 0ed9085

File tree

2 files changed

+32
-34
lines changed

2 files changed

+32
-34
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAnnotationDrivenConfiguration.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -51,23 +51,14 @@ class RabbitAnnotationDrivenConfiguration {
5151

5252
private final ObjectProvider<RabbitRetryTemplateCustomizer> retryTemplateCustomizers;
5353

54-
private final ObjectProvider<ContainerCustomizer<SimpleMessageListenerContainer>> simpleContainerCustomizer;
55-
56-
private final ObjectProvider<ContainerCustomizer<DirectMessageListenerContainer>> directContainerCustomizer;
57-
5854
private final RabbitProperties properties;
5955

6056
RabbitAnnotationDrivenConfiguration(ObjectProvider<MessageConverter> messageConverter,
6157
ObjectProvider<MessageRecoverer> messageRecoverer,
62-
ObjectProvider<RabbitRetryTemplateCustomizer> retryTemplateCustomizers,
63-
ObjectProvider<ContainerCustomizer<SimpleMessageListenerContainer>> simpleContainerCustomizer,
64-
ObjectProvider<ContainerCustomizer<DirectMessageListenerContainer>> directContainerCustomizer,
65-
RabbitProperties properties) {
58+
ObjectProvider<RabbitRetryTemplateCustomizer> retryTemplateCustomizers, RabbitProperties properties) {
6659
this.messageConverter = messageConverter;
6760
this.messageRecoverer = messageRecoverer;
6861
this.retryTemplateCustomizers = retryTemplateCustomizers;
69-
this.simpleContainerCustomizer = simpleContainerCustomizer;
70-
this.directContainerCustomizer = directContainerCustomizer;
7162
this.properties = properties;
7263
}
7364

@@ -88,10 +79,11 @@ SimpleRabbitListenerContainerFactoryConfigurer simpleRabbitListenerContainerFact
8879
@ConditionalOnProperty(prefix = "spring.rabbitmq.listener", name = "type", havingValue = "simple",
8980
matchIfMissing = true)
9081
SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory(
91-
SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) {
82+
SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory,
83+
ObjectProvider<ContainerCustomizer<SimpleMessageListenerContainer>> simpleContainerCustomizer) {
9284
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
9385
configurer.configure(factory, connectionFactory);
94-
this.simpleContainerCustomizer.ifUnique(factory::setContainerCustomizer);
86+
simpleContainerCustomizer.ifUnique(factory::setContainerCustomizer);
9587
return factory;
9688
}
9789

@@ -111,10 +103,11 @@ DirectRabbitListenerContainerFactoryConfigurer directRabbitListenerContainerFact
111103
@ConditionalOnMissingBean(name = "rabbitListenerContainerFactory")
112104
@ConditionalOnProperty(prefix = "spring.rabbitmq.listener", name = "type", havingValue = "direct")
113105
DirectRabbitListenerContainerFactory directRabbitListenerContainerFactory(
114-
DirectRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) {
106+
DirectRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory,
107+
ObjectProvider<ContainerCustomizer<DirectMessageListenerContainer>> directContainerCustomizer) {
115108
DirectRabbitListenerContainerFactory factory = new DirectRabbitListenerContainerFactory();
116109
configurer.configure(factory, connectionFactory);
117-
this.directContainerCustomizer.ifUnique(factory::setContainerCustomizer);
110+
directContainerCustomizer.ifUnique(factory::setContainerCustomizer);
118111
return factory;
119112
}
120113

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfigurationTests.java

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
import org.springframework.boot.test.system.OutputCaptureExtension;
6565
import org.springframework.context.annotation.Bean;
6666
import org.springframework.context.annotation.Configuration;
67+
import org.springframework.context.annotation.Import;
6768
import org.springframework.context.annotation.Primary;
6869
import org.springframework.core.Ordered;
6970
import org.springframework.core.annotation.Order;
@@ -78,6 +79,7 @@
7879

7980
import static org.assertj.core.api.Assertions.assertThat;
8081
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
82+
import static org.mockito.ArgumentMatchers.any;
8183
import static org.mockito.ArgumentMatchers.anyString;
8284
import static org.mockito.ArgumentMatchers.eq;
8385
import static org.mockito.ArgumentMatchers.isNull;
@@ -854,17 +856,20 @@ void whenMultipleConnectionFactoryCustomizersAreDefinedThenTheyAreCalledInOrder(
854856
}
855857

856858
@Test
857-
void simpleContainerCustomizer() {
858-
this.contextRunner.withUserConfiguration(SimpleContainerCustomizerConfiguration.class).run(
859-
(context) -> assertThat(context.getBean(SimpleContainerCustomizerConfiguration.class).customizerCalled)
860-
.isTrue());
859+
@SuppressWarnings("unchecked")
860+
void whenASimpleContainerCustomizerIsDefinedThenItIsCalledToConfigureTheContainer() {
861+
this.contextRunner.withUserConfiguration(SimpleContainerCustomizerConfiguration.class)
862+
.run((context) -> verify(context.getBean(ContainerCustomizer.class))
863+
.configure(any(SimpleMessageListenerContainer.class)));
861864
}
862865

863866
@Test
864-
void directContainerCustomizer() {
867+
@SuppressWarnings("unchecked")
868+
void whenADirectContainerCustomizerIsDefinedThenItIsCalledToConfigureTheContainer() {
865869
this.contextRunner.withUserConfiguration(DirectContainerCustomizerConfiguration.class)
866-
.withPropertyValues("spring.rabbitmq.listener.type:direct").run((context) -> assertThat(
867-
context.getBean(DirectContainerCustomizerConfiguration.class).customizerCalled).isTrue());
870+
.withPropertyValues("spring.rabbitmq.listener.type:direct")
871+
.run((context) -> verify(context.getBean(ContainerCustomizer.class))
872+
.configure(any(DirectMessageListenerContainer.class)));
868873
}
869874

870875
private com.rabbitmq.client.ConnectionFactory getTargetConnectionFactory(AssertableApplicationContext context) {
@@ -1131,36 +1136,36 @@ ConnectionFactoryCustomizer firstCustomizer() {
11311136

11321137
}
11331138

1139+
@Import(TestListener.class)
11341140
@Configuration(proxyBeanMethods = false)
11351141
static class SimpleContainerCustomizerConfiguration {
11361142

1137-
boolean customizerCalled;
1138-
1139-
@RabbitListener(queues = "test", autoStartup = "false")
1140-
void listen(String in) {
1141-
}
1142-
11431143
@Bean
1144+
@SuppressWarnings("unchecked")
11441145
ContainerCustomizer<SimpleMessageListenerContainer> customizer() {
1145-
return (container) -> this.customizerCalled = true;
1146+
return mock(ContainerCustomizer.class);
11461147
}
11471148

11481149
}
11491150

1151+
@Import(TestListener.class)
11501152
@Configuration(proxyBeanMethods = false)
11511153
static class DirectContainerCustomizerConfiguration {
11521154

1153-
boolean customizerCalled;
1155+
@Bean
1156+
@SuppressWarnings("unchecked")
1157+
ContainerCustomizer<DirectMessageListenerContainer> customizer() {
1158+
return mock(ContainerCustomizer.class);
1159+
}
1160+
1161+
}
1162+
1163+
static class TestListener {
11541164

11551165
@RabbitListener(queues = "test", autoStartup = "false")
11561166
void listen(String in) {
11571167
}
11581168

1159-
@Bean
1160-
ContainerCustomizer<DirectMessageListenerContainer> customizer() {
1161-
return (container) -> this.customizerCalled = true;
1162-
}
1163-
11641169
}
11651170

11661171
}

0 commit comments

Comments
 (0)