diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/annotation/RabbitListenerAnnotationBeanPostProcessor.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/annotation/RabbitListenerAnnotationBeanPostProcessor.java index a7cb2ce9..d5aa3068 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/annotation/RabbitListenerAnnotationBeanPostProcessor.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/annotation/RabbitListenerAnnotationBeanPostProcessor.java @@ -356,7 +356,6 @@ public class RabbitListenerAnnotationBeanPostProcessor for (RabbitListener classLevelListener : classLevelListeners) { MultiMethodRabbitListenerEndpoint endpoint = new MultiMethodRabbitListenerEndpoint(checkedMethods, defaultMethod, bean); - endpoint.setBeanFactory(this.beanFactory); processListener(endpoint, classLevelListener, bean, bean.getClass(), beanName); } } @@ -365,12 +364,6 @@ public class RabbitListenerAnnotationBeanPostProcessor Method methodToUse = checkProxy(method, bean); MethodRabbitListenerEndpoint endpoint = new MethodRabbitListenerEndpoint(); endpoint.setMethod(methodToUse); - endpoint.setBeanFactory(this.beanFactory); - endpoint.setReturnExceptions(resolveExpressionAsBoolean(rabbitListener.returnExceptions())); - String errorHandlerBeanName = resolveExpressionAsString(rabbitListener.errorHandler(), "errorHandler"); - if (StringUtils.hasText(errorHandlerBeanName)) { - endpoint.setErrorHandler(this.beanFactory.getBean(errorHandlerBeanName, RabbitListenerErrorHandler.class)); - } processListener(endpoint, rabbitListener, bean, methodToUse, beanName); } @@ -412,6 +405,12 @@ public class RabbitListenerAnnotationBeanPostProcessor endpoint.setId(getEndpointId(rabbitListener)); endpoint.setQueueNames(resolveQueues(rabbitListener)); endpoint.setConcurrency(resolveExpressionAsStringOrInteger(rabbitListener.concurrency(), "concurrency")); + endpoint.setBeanFactory(this.beanFactory); + endpoint.setReturnExceptions(resolveExpressionAsBoolean(rabbitListener.returnExceptions())); + String errorHandlerBeanName = resolveExpressionAsString(rabbitListener.errorHandler(), "errorHandler"); + if (StringUtils.hasText(errorHandlerBeanName)) { + endpoint.setErrorHandler(this.beanFactory.getBean(errorHandlerBeanName, RabbitListenerErrorHandler.class)); + } String group = rabbitListener.group(); if (StringUtils.hasText(group)) { Object resolvedGroup = resolveExpression(group); diff --git a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java index 8e6d35fc..275d9cd8 100644 --- a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java +++ b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java @@ -21,6 +21,7 @@ import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.startsWith; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -360,8 +361,10 @@ public class EnableRabbitIntegrationTests { this.jsonRabbitTemplate.convertAndSend(exchange, routingKey, bar); this.jsonRabbitTemplate.setReceiveTimeout(10000); assertEquals("BAR: barMultiListenerJsonBean", this.jsonRabbitTemplate.receiveAndConvert("sendTo.replies.spel")); - assertThat(TestUtils.getPropertyValue(this.registry.getListenerContainer("multi"), "concurrentConsumers"), - equalTo(1)); + MessageListenerContainer container = this.registry.getListenerContainer("multi"); + assertThat(TestUtils.getPropertyValue(container, "concurrentConsumers"), equalTo(1)); + assertThat(TestUtils.getPropertyValue(container, "messageListener.errorHandler"), notNullValue()); + assertTrue(TestUtils.getPropertyValue(container, "messageListener.returnExceptions", Boolean.class)); } @Test @@ -1413,7 +1416,8 @@ public class EnableRabbitIntegrationTests { @RabbitListener(id = "multi", bindings = @QueueBinding (value = @Queue, exchange = @Exchange(value = "multi.json.exch", autoDelete = "true"), - key = "multi.json.rk"), containerFactory = "simpleJsonListenerContainerFactory") + key = "multi.json.rk"), containerFactory = "simpleJsonListenerContainerFactory", + errorHandler = "alwaysBARHandler", returnExceptions = "true") static class MultiListenerJsonBean { @RabbitHandler