Skip to content

Commit c4205d0

Browse files
committed
Rework ListenerContainerFactory configurers
Rework commit b726974 to avoid exposing setters that would permit anyone to change Spring Boot's defaults. Also, since these are configurers of a specific instance, they should be named accordingly. Closes gh-5138
1 parent f94e8bd commit c4205d0

File tree

6 files changed

+64
-65
lines changed

6 files changed

+64
-65
lines changed

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.springframework.amqp.rabbit.config.RabbitListenerConfigUtils;
2121
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
2222
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
23+
import org.springframework.beans.factory.annotation.Autowired;
2324
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2425
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2526
import org.springframework.context.annotation.Bean;
@@ -36,18 +37,27 @@
3637
@ConditionalOnClass(EnableRabbit.class)
3738
class RabbitAnnotationDrivenConfiguration {
3839

40+
@Autowired
41+
private RabbitProperties properties;
42+
3943
@Bean
4044
@ConditionalOnMissingBean
41-
public RabbitListenerContainerFactoryConfigurer rabbitListenerContainerFactoryConfigurer() {
42-
return new RabbitListenerContainerFactoryConfigurer();
45+
public SimpleRabbitListenerContainerFactoryConfigurer rabbitListenerContainerFactoryConfigurer() {
46+
SimpleRabbitListenerContainerFactoryConfigurer configurer =
47+
new SimpleRabbitListenerContainerFactoryConfigurer();
48+
configurer.setRabbitProperties(this.properties);
49+
return configurer;
4350
}
4451

4552
@Bean
4653
@ConditionalOnMissingBean(name = "rabbitListenerContainerFactory")
4754
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(
48-
RabbitListenerContainerFactoryConfigurer configurer,
55+
SimpleRabbitListenerContainerFactoryConfigurer configurer,
4956
ConnectionFactory connectionFactory) {
50-
return configurer.createRabbitListenerContainerFactory(connectionFactory);
57+
SimpleRabbitListenerContainerFactory factory =
58+
new SimpleRabbitListenerContainerFactory();
59+
configurer.configure(factory, connectionFactory);
60+
return factory;
5161
}
5262

5363
@EnableRabbit
Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
2020
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
2121
import org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory;
22-
import org.springframework.beans.factory.annotation.Autowired;
2322
import org.springframework.util.Assert;
2423

2524
/**
@@ -28,35 +27,21 @@
2827
* @author Stephane Nicoll
2928
* @since 1.3.3
3029
*/
31-
public final class RabbitListenerContainerFactoryConfigurer {
30+
public final class SimpleRabbitListenerContainerFactoryConfigurer {
3231

3332
private RabbitProperties rabbitProperties;
3433

3534
/**
3635
* Set the {@link RabbitProperties} to use.
3736
* @param rabbitProperties the {@link RabbitProperties}
3837
*/
39-
@Autowired
40-
public void setRabbitProperties(RabbitProperties rabbitProperties) {
38+
void setRabbitProperties(RabbitProperties rabbitProperties) {
4139
this.rabbitProperties = rabbitProperties;
4240
}
4341

4442
/**
45-
* Create a new and pre-configured {@link SimpleRabbitListenerContainerFactory}
46-
* instance for the specified {@link ConnectionFactory}.
47-
* @param connectionFactory the {@link ConnectionFactory} to use.
48-
* @return a pre-configured {@link SimpleRabbitListenerContainerFactory}
49-
*/
50-
public SimpleRabbitListenerContainerFactory createRabbitListenerContainerFactory(
51-
ConnectionFactory connectionFactory) {
52-
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
53-
configure(factory, connectionFactory);
54-
return factory;
55-
}
56-
57-
/**
58-
* Apply the default settings for the specified jms listener container factory. The
59-
* factory can be further tuned and default settings can be overridden.
43+
* Configure the specified rabbit listener container factory. The factory can be
44+
* further tuned and default settings can be overridden.
6045
* @param factory the {@link SimpleRabbitListenerContainerFactory} instance to
6146
* configure
6247
* @param connectionFactory the {@link ConnectionFactory} to use
Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,18 @@
1818

1919
import javax.jms.ConnectionFactory;
2020

21-
import org.springframework.beans.factory.annotation.Autowired;
2221
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
23-
import org.springframework.jms.config.JmsListenerContainerFactory;
2422
import org.springframework.jms.support.destination.DestinationResolver;
2523
import org.springframework.transaction.jta.JtaTransactionManager;
2624
import org.springframework.util.Assert;
2725

2826
/**
29-
* Configure {@link JmsListenerContainerFactory} with sensible defaults.
27+
* Configure {@link DefaultJmsListenerContainerFactory} with sensible defaults.
3028
*
3129
* @author Stephane Nicoll
3230
* @since 1.3.3
3331
*/
34-
public final class JmsListenerContainerFactoryConfigurer {
32+
public final class DefaultJmsListenerContainerFactoryConfigurer {
3533

3634
private DestinationResolver destinationResolver;
3735

@@ -44,8 +42,7 @@ public final class JmsListenerContainerFactoryConfigurer {
4442
* resolver should be associated with the factory by default.
4543
* @param destinationResolver the {@link DestinationResolver}
4644
*/
47-
@Autowired(required = false)
48-
public void setDestinationResolver(DestinationResolver destinationResolver) {
45+
void setDestinationResolver(DestinationResolver destinationResolver) {
4946
this.destinationResolver = destinationResolver;
5047
}
5148

@@ -54,36 +51,22 @@ public void setDestinationResolver(DestinationResolver destinationResolver) {
5451
* should not be used.
5552
* @param transactionManager the {@link JtaTransactionManager}
5653
*/
57-
@Autowired(required = false)
58-
public void setTransactionManager(JtaTransactionManager transactionManager) {
54+
void setTransactionManager(JtaTransactionManager transactionManager) {
5955
this.transactionManager = transactionManager;
6056
}
6157

6258
/**
6359
* Set the {@link JmsProperties to use}.
6460
* @param jmsProperties the {@link JmsProperties}
6561
*/
66-
@Autowired
67-
public void setJmsProperties(JmsProperties jmsProperties) {
62+
void setJmsProperties(JmsProperties jmsProperties) {
6863
this.jmsProperties = jmsProperties;
6964
}
7065

71-
/**
72-
* Create a new and pre-configured {@link DefaultJmsListenerContainerFactory} instance
73-
* for the specified {@link ConnectionFactory}.
74-
* @param connectionFactory the {@link ConnectionFactory} to use.
75-
* @return a pre-configured {@link DefaultJmsListenerContainerFactory}
76-
*/
77-
public DefaultJmsListenerContainerFactory createJmsListenerContainerFactory(
78-
ConnectionFactory connectionFactory) {
79-
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
80-
configure(factory, connectionFactory);
81-
return factory;
82-
}
8366

8467
/**
85-
* Apply the default settings for the specified jms listener container factory. The
86-
* factory can be further tuned and default settings can be overridden.
68+
* Configure the specified jms listener container factory. The factory can be further
69+
* tuned and default settings can be overridden.
8770
* @param factory the {@link DefaultJmsListenerContainerFactory} instance to configure
8871
* @param connectionFactory the {@link ConnectionFactory} to use
8972
*/

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/JmsAnnotationDrivenConfiguration.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import javax.jms.ConnectionFactory;
2020

21+
import org.springframework.beans.factory.annotation.Autowired;
2122
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2223
import org.springframework.boot.autoconfigure.condition.ConditionalOnJndi;
2324
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -28,6 +29,7 @@
2829
import org.springframework.jms.config.JmsListenerConfigUtils;
2930
import org.springframework.jms.support.destination.DestinationResolver;
3031
import org.springframework.jms.support.destination.JndiDestinationResolver;
32+
import org.springframework.transaction.jta.JtaTransactionManager;
3133

3234
/**
3335
* Configuration for Spring 4.1 annotation driven JMS.
@@ -40,18 +42,34 @@
4042
@ConditionalOnClass(EnableJms.class)
4143
class JmsAnnotationDrivenConfiguration {
4244

45+
@Autowired(required = false)
46+
private DestinationResolver destinationResolver;
47+
48+
@Autowired(required = false)
49+
private JtaTransactionManager transactionManager;
50+
51+
@Autowired
52+
private JmsProperties properties;
53+
4354
@Bean
4455
@ConditionalOnMissingBean
45-
public JmsListenerContainerFactoryConfigurer jmsListenerContainerFactoryConfigurer() {
46-
return new JmsListenerContainerFactoryConfigurer();
56+
public DefaultJmsListenerContainerFactoryConfigurer jmsListenerContainerFactoryConfigurer() {
57+
DefaultJmsListenerContainerFactoryConfigurer configurer =
58+
new DefaultJmsListenerContainerFactoryConfigurer();
59+
configurer.setDestinationResolver(this.destinationResolver);
60+
configurer.setTransactionManager(this.transactionManager);
61+
configurer.setJmsProperties(this.properties);
62+
return configurer;
4763
}
4864

4965
@Bean
5066
@ConditionalOnMissingBean(name = "jmsListenerContainerFactory")
5167
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(
52-
JmsListenerContainerFactoryConfigurer configurer,
68+
DefaultJmsListenerContainerFactoryConfigurer configurer,
5369
ConnectionFactory connectionFactory) {
54-
return configurer.createJmsListenerContainerFactory(connectionFactory);
70+
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
71+
configurer.configure(factory, connectionFactory);
72+
return factory;
5573
}
5674

5775
@EnableJms

spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/JmsAutoConfigurationTests.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -469,10 +469,11 @@ protected static class TestConfiguration9 {
469469

470470
@Bean
471471
JmsListenerContainerFactory<?> customListenerContainerFactory(
472-
JmsListenerContainerFactoryConfigurer configurer,
472+
DefaultJmsListenerContainerFactoryConfigurer configurer,
473473
ConnectionFactory connectionFactory) {
474-
DefaultJmsListenerContainerFactory factory = configurer
475-
.createJmsListenerContainerFactory(connectionFactory);
474+
DefaultJmsListenerContainerFactory factory =
475+
new DefaultJmsListenerContainerFactory();
476+
configurer.configure(factory, connectionFactory);
476477
factory.setCacheLevel(DefaultMessageListenerContainer.CACHE_CONSUMER);
477478
return factory;
478479

spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3490,9 +3490,9 @@ TIP: Check {spring-javadoc}/jms/annotation/EnableJms.{dc-ext}[the Javadoc of `@E
34903490
more details.
34913491

34923492
If you need to create more `JmsListenerContainerFactory` instances or if you want to override
3493-
the default, Spring Boot provides a `JmsListenerContainerFactoryConfigurer` that you can use
3494-
to initialize a `DefaultJmsListenerContainerFactory` with the same settings as the one that
3495-
is auto-configured.
3493+
the default, Spring Boot provides a `DefaultJmsListenerContainerFactoryConfigurer` that you
3494+
can use to initialize a `DefaultJmsListenerContainerFactory` with the same settings as the one
3495+
that is auto-configured.
34963496

34973497
For instance, the following exposes another factory that uses a specific `MessageConverter`:
34983498

@@ -3503,9 +3503,10 @@ For instance, the following exposes another factory that uses a specific `Messag
35033503
35043504
@Bean
35053505
public DefaultJmsListenerContainerFactory myFactory(
3506-
JmsListenerContainerFactoryConfigurer configurer) {
3507-
DefaultJmsListenerContainerFactory factory = configurer
3508-
.createJmsListenerContainerFactory(connectionFactory());
3506+
DefaultJmsListenerContainerFactoryConfigurer configurer) {
3507+
DefaultJmsListenerContainerFactory factory =
3508+
new DefaultJmsListenerContainerFactory();
3509+
configurer.configure(factory, connectionFactory());
35093510
factory.setMessageConverter(myMessageConverter());
35103511
return factory;
35113512
}
@@ -3624,8 +3625,8 @@ TIP: Check {spring-amqp-javadoc}/rabbit/annotation/EnableRabbit.{dc-ext}[the Jav
36243625
for more details.
36253626

36263627
If you need to create more `RabbitListenerContainerFactory` instances or if you want to override
3627-
the default, Spring Boot provides a `RabbitListenerContainerFactoryConfigurer` that you can use
3628-
to initialize a `SimpleRabbitListenerContainerFactory` with the same settings as the one that
3628+
the default, Spring Boot provides a `SimpleRabbitListenerContainerFactoryConfigurer` that you can
3629+
use to initialize a `SimpleRabbitListenerContainerFactory` with the same settings as the one that
36293630
is auto-configured.
36303631

36313632
For instance, the following exposes another factory that uses a specific `MessageConverter`:
@@ -3637,9 +3638,10 @@ For instance, the following exposes another factory that uses a specific `Messag
36373638
36383639
@Bean
36393640
public SimpleRabbitListenerContainerFactory myFactory(
3640-
RabbitListenerContainerFactoryConfigurer configurer) {
3641-
SimpleRabbitListenerContainerFactory factory = configurer
3642-
.createRabbitListenerContainerFactory(connectionFactory());
3641+
SimpleRabbitListenerContainerFactoryConfigurer configurer) {
3642+
SimpleRabbitListenerContainerFactory factory =
3643+
new SimpleRabbitListenerContainerFactory();
3644+
configurer.configure(factory, connectionFactory);
36433645
factory.setMessageConverter(myMessageConverter());
36443646
return factory;
36453647
}

0 commit comments

Comments
 (0)