From ef5db3059d631c04ab11fd62dfea4cefe9fa0f46 Mon Sep 17 00:00:00 2001 From: EddieChoCho Date: Sat, 12 Aug 2023 09:47:28 -0400 Subject: [PATCH] GH-8703: Fix MessagingAnnotationPP for AOT Fixes https://github.com/spring-projects/spring-integration/issues/8703 * Instantiate a `MessagingAnnotationBeanPostProcessor` via factory method from `MessagingAnnotationPostProcessor` avoiding extra code generation on an explicitly provided complex `Map` for bean definition property * Fix test to react properly to a new logic of `MessagingAnnotationBeanPostProcessor` bean registration --- .../config/IntegrationRegistrar.java | 25 +++++++---- .../MessagingAnnotationBeanPostProcessor.java | 8 +--- .../MessagingAnnotationPostProcessor.java | 20 ++++----- .../bus/DirectChannelSubscriptionTests.java | 5 ++- ...ActivatorAnnotationPostProcessorTests.java | 6 +-- .../CustomMessagingAnnotationTests.java | 7 +--- .../FilterAnnotationPostProcessorTests.java | 5 ++- ...MessagingAnnotationPostProcessorTests.java | 42 +++++++++---------- .../RouterAnnotationPostProcessorTests.java | 5 ++- .../SplitterAnnotationPostProcessorTests.java | 5 ++- .../annotation/SubscriberOrderTests.java | 14 +++---- .../tcp/connection/TcpNioConnectionTests.java | 4 +- 12 files changed, 74 insertions(+), 72 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/IntegrationRegistrar.java b/spring-integration-core/src/main/java/org/springframework/integration/config/IntegrationRegistrar.java index 236959a921..e915a2c431 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/IntegrationRegistrar.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/IntegrationRegistrar.java @@ -16,6 +16,8 @@ package org.springframework.integration.config; +import java.beans.Introspector; + import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; @@ -99,19 +101,28 @@ public class IntegrationRegistrar implements ImportBeanDefinitionRegistrar { /** * Register {@link MessagingAnnotationPostProcessor} and - * {@link org.springframework.integration.aop.PublisherAnnotationBeanPostProcessor}, + * {@link MessagingAnnotationBeanPostProcessor}, * if necessary. - * Inject {@code defaultPublishedChannel} from provided {@link AnnotationMetadata}, if any. * @param registry The {@link BeanDefinitionRegistry} to register additional {@link BeanDefinition}s. + * @see MessagingAnnotationPostProcessor#messagingAnnotationBeanPostProcessor() */ private void registerMessagingAnnotationPostProcessors(BeanDefinitionRegistry registry) { if (!registry.containsBeanDefinition(IntegrationContextUtils.MESSAGING_ANNOTATION_POSTPROCESSOR_NAME)) { - BeanDefinitionBuilder builder = - BeanDefinitionBuilder.genericBeanDefinition(MessagingAnnotationPostProcessor.class) - .setRole(BeanDefinition.ROLE_INFRASTRUCTURE); - registry.registerBeanDefinition(IntegrationContextUtils.MESSAGING_ANNOTATION_POSTPROCESSOR_NAME, - builder.getBeanDefinition()); + BeanDefinitionBuilder.genericBeanDefinition(MessagingAnnotationPostProcessor.class) + .setRole(BeanDefinition.ROLE_INFRASTRUCTURE) + .getBeanDefinition()); + } + + + String beanName = Introspector.decapitalize(MessagingAnnotationBeanPostProcessor.class.getName()); + if (!registry.containsBeanDefinition(beanName)) { + registry.registerBeanDefinition(beanName, + BeanDefinitionBuilder.genericBeanDefinition() + .setFactoryMethodOnBean("messagingAnnotationBeanPostProcessor", + IntegrationContextUtils.MESSAGING_ANNOTATION_POSTPROCESSOR_NAME) + .setRole(BeanDefinition.ROLE_INFRASTRUCTURE) + .getBeanDefinition()); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingAnnotationBeanPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingAnnotationBeanPostProcessor.java index e9554ebc66..feebe8d442 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingAnnotationBeanPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingAnnotationBeanPostProcessor.java @@ -65,16 +65,13 @@ public class MessagingAnnotationBeanPostProcessor private final List methodsToPostProcessAfterContextInitialization = new ArrayList<>(); - private final BeanDefinitionRegistry registry; - private ConfigurableListableBeanFactory beanFactory; private volatile boolean initialized; - public MessagingAnnotationBeanPostProcessor(BeanDefinitionRegistry registry, + public MessagingAnnotationBeanPostProcessor( Map, MethodAnnotationPostProcessor> postProcessors) { - this.registry = registry; this.postProcessors = postProcessors; } @@ -187,13 +184,12 @@ public class MessagingAnnotationBeanPostProcessor String endpointBeanName = generateBeanName(beanName, method, annotationType); endpoint.setBeanName(endpointBeanName); - this.registry.registerBeanDefinition(endpointBeanName, + ((BeanDefinitionRegistry) this.beanFactory).registerBeanDefinition(endpointBeanName, new RootBeanDefinition((Class) endpoint.getClass(), () -> endpoint)); this.beanFactory.getBean(endpointBeanName); } } - protected String generateBeanName(String originalBeanName, Method method, Class annotationType) { diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingAnnotationPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingAnnotationPostProcessor.java index 8813a1a371..c731dc1b2f 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingAnnotationPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingAnnotationPostProcessor.java @@ -16,7 +16,6 @@ package org.springframework.integration.config; -import java.beans.Introspector; import java.lang.annotation.Annotation; import java.util.HashMap; import java.util.List; @@ -29,7 +28,6 @@ import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; -import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; import org.springframework.beans.factory.support.BeanDefinitionValidationException; @@ -91,14 +89,6 @@ public class MessagingAnnotationPostProcessor implements BeanDefinitionRegistryP .map(BeanFactoryAware.class::cast) .forEach((processor) -> processor.setBeanFactory((BeanFactory) this.registry)); - this.registry.registerBeanDefinition( - Introspector.decapitalize(MessagingAnnotationBeanPostProcessor.class.getName()), - BeanDefinitionBuilder.rootBeanDefinition(MessagingAnnotationBeanPostProcessor.class) - .setRole(BeanDefinition.ROLE_INFRASTRUCTURE) - .addConstructorArgValue(this.registry) - .addConstructorArgValue(this.postProcessors) - .getBeanDefinition()); - String[] beanNames = registry.getBeanDefinitionNames(); for (String beanName : beanNames) { @@ -111,6 +101,16 @@ public class MessagingAnnotationPostProcessor implements BeanDefinitionRegistryP } } + /** + * The factory method for {@link MessagingAnnotationBeanPostProcessor} based + * on the environment from this {@link MessagingAnnotationPostProcessor}. + * @return the {@link MessagingAnnotationBeanPostProcessor} instance based on {@link #postProcessors}. + * @since 6.2 + */ + public MessagingAnnotationBeanPostProcessor messagingAnnotationBeanPostProcessor() { + return new MessagingAnnotationBeanPostProcessor(this.postProcessors); + } + private void processCandidate(String beanName, AnnotatedBeanDefinition beanDefinition) { MethodMetadata methodMetadata = beanDefinition.getFactoryMethodMetadata(); MergedAnnotations annotations = methodMetadata.getAnnotations(); // NOSONAR diff --git a/spring-integration-core/src/test/java/org/springframework/integration/bus/DirectChannelSubscriptionTests.java b/spring-integration-core/src/test/java/org/springframework/integration/bus/DirectChannelSubscriptionTests.java index d037d92733..803ce4c7ad 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/bus/DirectChannelSubscriptionTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/bus/DirectChannelSubscriptionTests.java @@ -24,7 +24,7 @@ import org.springframework.integration.annotation.MessageEndpoint; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.integration.channel.DirectChannel; import org.springframework.integration.channel.QueueChannel; -import org.springframework.integration.config.MessagingAnnotationPostProcessor; +import org.springframework.integration.config.IntegrationRegistrar; import org.springframework.integration.context.IntegrationContextUtils; import org.springframework.integration.endpoint.EventDrivenConsumer; import org.springframework.integration.handler.AbstractReplyProducingMessageHandler; @@ -38,6 +38,7 @@ import org.springframework.messaging.support.GenericMessage; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.mockito.Mockito.mock; /** * @author Mark Fisher @@ -54,7 +55,7 @@ public class DirectChannelSubscriptionTests { @BeforeEach public void setupChannels() { - this.context.registerBean(MessagingAnnotationPostProcessor.class); + new IntegrationRegistrar().registerBeanDefinitions(mock(), this.context.getDefaultListableBeanFactory()); this.context.registerChannel("sourceChannel", this.sourceChannel); this.context.registerChannel("targetChannel", this.targetChannel); } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/ServiceActivatorAnnotationPostProcessorTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/ServiceActivatorAnnotationPostProcessorTests.java index faa0a707f2..6dcdf7f542 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/ServiceActivatorAnnotationPostProcessorTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/ServiceActivatorAnnotationPostProcessorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -31,6 +31,7 @@ import org.springframework.messaging.MessageChannel; import org.springframework.messaging.support.GenericMessage; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; /** * @author Mark Fisher @@ -42,8 +43,7 @@ public class ServiceActivatorAnnotationPostProcessorTests { public void testAnnotatedMethod() throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); try (TestApplicationContext context = TestUtils.createTestApplicationContext()) { - RootBeanDefinition postProcessorDef = new RootBeanDefinition(MessagingAnnotationPostProcessor.class); - context.registerBeanDefinition("postProcessor", postProcessorDef); + new IntegrationRegistrar().registerBeanDefinitions(mock(), context.getDefaultListableBeanFactory()); context.registerBeanDefinition("testChannel", new RootBeanDefinition(DirectChannel.class)); RootBeanDefinition beanDefinition = new RootBeanDefinition(SimpleServiceActivatorAnnotationTestBean.class); beanDefinition.getConstructorArgumentValues().addGenericArgumentValue(latch); diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/CustomMessagingAnnotationTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/CustomMessagingAnnotationTests.java index 3bfe40c139..bc1d109c98 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/CustomMessagingAnnotationTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/CustomMessagingAnnotationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2022 the original author or authors. + * Copyright 2017-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,7 +33,6 @@ import org.mockito.ArgumentCaptor; import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.AnnotationUtils; @@ -103,9 +102,7 @@ public class CustomMessagingAnnotationTests { public static class Config { @Bean(name = IntegrationContextUtils.MESSAGING_ANNOTATION_POSTPROCESSOR_NAME) - public static MessagingAnnotationPostProcessor messagingAnnotationPostProcessor( - ConfigurableListableBeanFactory beanFactory) { - + public static MessagingAnnotationPostProcessor messagingAnnotationPostProcessor() { MessagingAnnotationPostProcessor messagingAnnotationPostProcessor = new MessagingAnnotationPostProcessor(); messagingAnnotationPostProcessor. addMessagingAnnotationPostProcessor(Logging.class, new LogAnnotationPostProcessor()); diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/FilterAnnotationPostProcessorTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/FilterAnnotationPostProcessorTests.java index 76047981a9..98161684b7 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/FilterAnnotationPostProcessorTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/FilterAnnotationPostProcessorTests.java @@ -27,8 +27,8 @@ import org.springframework.integration.annotation.Filter; import org.springframework.integration.annotation.MessageEndpoint; import org.springframework.integration.channel.DirectChannel; import org.springframework.integration.channel.QueueChannel; +import org.springframework.integration.config.IntegrationRegistrar; import org.springframework.integration.config.MessagingAnnotationBeanPostProcessor; -import org.springframework.integration.config.MessagingAnnotationPostProcessor; import org.springframework.integration.endpoint.EventDrivenConsumer; import org.springframework.integration.handler.advice.AbstractRequestHandlerAdvice; import org.springframework.integration.test.util.TestUtils; @@ -38,6 +38,7 @@ import org.springframework.messaging.support.GenericMessage; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; +import static org.mockito.Mockito.mock; /** * @author Mark Fisher @@ -56,7 +57,7 @@ public class FilterAnnotationPostProcessorTests { @BeforeEach public void init() { - this.context.registerBean(MessagingAnnotationPostProcessor.class); + new IntegrationRegistrar().registerBeanDefinitions(mock(), this.context.getDefaultListableBeanFactory()); this.context.registerChannel("input", this.inputChannel); this.context.registerChannel("output", this.outputChannel); } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/MessagingAnnotationPostProcessorTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/MessagingAnnotationPostProcessorTests.java index be954f5c38..94123ddcb5 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/MessagingAnnotationPostProcessorTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/MessagingAnnotationPostProcessorTests.java @@ -34,8 +34,8 @@ import org.springframework.integration.annotation.ServiceActivator; import org.springframework.integration.annotation.Transformer; import org.springframework.integration.channel.DirectChannel; import org.springframework.integration.channel.QueueChannel; +import org.springframework.integration.config.IntegrationRegistrar; import org.springframework.integration.config.MessagingAnnotationBeanPostProcessor; -import org.springframework.integration.config.MessagingAnnotationPostProcessor; import org.springframework.integration.endpoint.AbstractEndpoint; import org.springframework.integration.handler.advice.AbstractRequestHandlerAdvice; import org.springframework.integration.support.MessageBuilder; @@ -49,6 +49,7 @@ import org.springframework.messaging.core.DestinationResolver; import org.springframework.messaging.support.GenericMessage; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; /** * @author Mark Fisher @@ -59,10 +60,9 @@ public class MessagingAnnotationPostProcessorTests { @Test public void serviceActivatorAnnotation() { - TestApplicationContext context = TestUtils.createTestApplicationContext(); + TestApplicationContext context = createTestApplicationContext(); DirectChannel inputChannel = new DirectChannel(); context.registerChannel("inputChannel", inputChannel); - context.registerBean(MessagingAnnotationPostProcessor.class); context.refresh(); MessagingAnnotationBeanPostProcessor postProcessor = context.getBean(MessagingAnnotationBeanPostProcessor.class); @@ -134,8 +134,7 @@ public class MessagingAnnotationPostProcessorTests { @Test public void outboundOnlyServiceActivator() throws InterruptedException { - TestApplicationContext context = TestUtils.createTestApplicationContext(); - context.registerBean(MessagingAnnotationPostProcessor.class); + TestApplicationContext context = createTestApplicationContext(); context.registerChannel("testChannel", new DirectChannel()); CountDownLatch latch = new CountDownLatch(1); OutboundOnlyTestBean testBean = new OutboundOnlyTestBean(latch); @@ -144,16 +143,14 @@ public class MessagingAnnotationPostProcessorTests { DestinationResolver channelResolver = new BeanFactoryChannelResolver(context); MessageChannel testChannel = channelResolver.resolveDestination("testChannel"); testChannel.send(new GenericMessage<>("foo")); - latch.await(1000, TimeUnit.MILLISECONDS); - assertThat(latch.getCount()).isEqualTo(0); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); assertThat(testBean.getMessageText()).isEqualTo("foo"); context.close(); } @Test public void testChannelResolution() { - TestApplicationContext context = TestUtils.createTestApplicationContext(); - context.registerBean(MessagingAnnotationPostProcessor.class); + TestApplicationContext context = createTestApplicationContext(); DirectChannel inputChannel = new DirectChannel(); QueueChannel outputChannel = new QueueChannel(); DirectChannel eventBus = new DirectChannel(); @@ -177,8 +174,7 @@ public class MessagingAnnotationPostProcessorTests { @Test public void testProxiedMessageEndpointAnnotation() { - TestApplicationContext context = TestUtils.createTestApplicationContext(); - context.registerBean(MessagingAnnotationPostProcessor.class); + TestApplicationContext context = createTestApplicationContext(); DirectChannel inputChannel = new DirectChannel(); QueueChannel outputChannel = new QueueChannel(); context.registerChannel("inputChannel", inputChannel); @@ -195,8 +191,7 @@ public class MessagingAnnotationPostProcessorTests { @Test public void testMessageEndpointAnnotationInherited() { - TestApplicationContext context = TestUtils.createTestApplicationContext(); - context.registerBean(MessagingAnnotationPostProcessor.class); + TestApplicationContext context = createTestApplicationContext(); DirectChannel inputChannel = new DirectChannel(); QueueChannel outputChannel = new QueueChannel(); context.registerChannel("inputChannel", inputChannel); @@ -211,8 +206,7 @@ public class MessagingAnnotationPostProcessorTests { @Test public void testMessageEndpointAnnotationInheritedWithProxy() { - TestApplicationContext context = TestUtils.createTestApplicationContext(); - context.registerBean(MessagingAnnotationPostProcessor.class); + TestApplicationContext context = createTestApplicationContext(); DirectChannel inputChannel = new DirectChannel(); QueueChannel outputChannel = new QueueChannel(); context.registerChannel("inputChannel", inputChannel); @@ -229,8 +223,7 @@ public class MessagingAnnotationPostProcessorTests { @Test public void testMessageEndpointAnnotationInheritedFromInterface() { - TestApplicationContext context = TestUtils.createTestApplicationContext(); - context.registerBean(MessagingAnnotationPostProcessor.class); + TestApplicationContext context = createTestApplicationContext(); DirectChannel inputChannel = new DirectChannel(); QueueChannel outputChannel = new QueueChannel(); context.registerChannel("inputChannel", inputChannel); @@ -245,8 +238,7 @@ public class MessagingAnnotationPostProcessorTests { @Test public void testMessageEndpointAnnotationInheritedFromInterfaceWithAutoCreatedChannels() { - TestApplicationContext context = TestUtils.createTestApplicationContext(); - context.registerBean(MessagingAnnotationPostProcessor.class); + TestApplicationContext context = createTestApplicationContext(); DirectChannel inputChannel = new DirectChannel(); QueueChannel outputChannel = new QueueChannel(); context.registerChannel("inputChannel", inputChannel); @@ -261,8 +253,7 @@ public class MessagingAnnotationPostProcessorTests { @Test public void testMessageEndpointAnnotationInheritedFromInterfaceWithProxy() { - TestApplicationContext context = TestUtils.createTestApplicationContext(); - context.registerBean(MessagingAnnotationPostProcessor.class); + TestApplicationContext context = createTestApplicationContext(); DirectChannel inputChannel = new DirectChannel(); QueueChannel outputChannel = new QueueChannel(); context.registerChannel("inputChannel", inputChannel); @@ -278,8 +269,7 @@ public class MessagingAnnotationPostProcessorTests { @Test public void testTransformer() { - TestApplicationContext context = TestUtils.createTestApplicationContext(); - context.registerBean(MessagingAnnotationPostProcessor.class); + TestApplicationContext context = createTestApplicationContext(); DirectChannel inputChannel = new DirectChannel(); context.registerChannel("inputChannel", inputChannel); QueueChannel outputChannel = new QueueChannel(); @@ -298,6 +288,12 @@ public class MessagingAnnotationPostProcessorTests { context.close(); } + private static TestApplicationContext createTestApplicationContext() { + TestApplicationContext context = TestUtils.createTestApplicationContext(); + new IntegrationRegistrar().registerBeanDefinitions(mock(), context.getDefaultListableBeanFactory()); + return context; + } + @MessageEndpoint public static class OutboundOnlyTestBean { diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/RouterAnnotationPostProcessorTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/RouterAnnotationPostProcessorTests.java index 9fe68682c1..7c7716a5d6 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/RouterAnnotationPostProcessorTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/RouterAnnotationPostProcessorTests.java @@ -27,13 +27,14 @@ import org.springframework.integration.annotation.MessageEndpoint; import org.springframework.integration.annotation.Router; import org.springframework.integration.channel.DirectChannel; import org.springframework.integration.channel.QueueChannel; -import org.springframework.integration.config.MessagingAnnotationPostProcessor; +import org.springframework.integration.config.IntegrationRegistrar; import org.springframework.integration.test.util.TestUtils; import org.springframework.integration.test.util.TestUtils.TestApplicationContext; import org.springframework.messaging.Message; import org.springframework.messaging.support.GenericMessage; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; /** * @author Mark Fisher @@ -56,7 +57,7 @@ public class RouterAnnotationPostProcessorTests { @BeforeEach public void init() { - this.context.registerBean(MessagingAnnotationPostProcessor.class); + new IntegrationRegistrar().registerBeanDefinitions(mock(), this.context.getDefaultListableBeanFactory()); context.registerChannel("input", inputChannel); context.registerChannel("output", outputChannel); context.registerChannel("routingChannel", routingChannel); diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/SplitterAnnotationPostProcessorTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/SplitterAnnotationPostProcessorTests.java index bcdd6a7ef8..56cfd7bfbf 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/SplitterAnnotationPostProcessorTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/SplitterAnnotationPostProcessorTests.java @@ -25,7 +25,7 @@ import org.springframework.integration.annotation.MessageEndpoint; import org.springframework.integration.annotation.Splitter; import org.springframework.integration.channel.DirectChannel; import org.springframework.integration.channel.QueueChannel; -import org.springframework.integration.config.MessagingAnnotationPostProcessor; +import org.springframework.integration.config.IntegrationRegistrar; import org.springframework.integration.endpoint.AbstractEndpoint; import org.springframework.integration.test.util.TestUtils; import org.springframework.integration.test.util.TestUtils.TestApplicationContext; @@ -33,6 +33,7 @@ import org.springframework.messaging.Message; import org.springframework.messaging.support.GenericMessage; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; /** * @author Mark Fisher @@ -49,7 +50,7 @@ public class SplitterAnnotationPostProcessorTests { @BeforeEach public void init() { - this.context.registerBean(MessagingAnnotationPostProcessor.class); + new IntegrationRegistrar().registerBeanDefinitions(mock(), this.context.getDefaultListableBeanFactory()); this.context.registerChannel("input", this.inputChannel); this.context.registerChannel("output", this.outputChannel); } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/SubscriberOrderTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/SubscriberOrderTests.java index 0d0ace7c37..1266d3d9cb 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/SubscriberOrderTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/annotation/SubscriberOrderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,7 +29,7 @@ import org.springframework.integration.MessageRejectedException; import org.springframework.integration.annotation.MessageEndpoint; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.integration.channel.DirectChannel; -import org.springframework.integration.config.MessagingAnnotationPostProcessor; +import org.springframework.integration.config.IntegrationRegistrar; import org.springframework.integration.dispatcher.RoundRobinLoadBalancingStrategy; import org.springframework.integration.test.util.TestUtils; import org.springframework.messaging.Message; @@ -37,6 +37,7 @@ import org.springframework.messaging.MessageChannel; import org.springframework.messaging.support.GenericMessage; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; /** * @author Mark Fisher @@ -47,8 +48,7 @@ public class SubscriberOrderTests { @Test public void directChannelAndFailoverDispatcherWithSingleCallPerMethod() { try (GenericApplicationContext context = TestUtils.createTestApplicationContext()) { - context.registerBeanDefinition("postProcessor", - new RootBeanDefinition(MessagingAnnotationPostProcessor.class)); + new IntegrationRegistrar().registerBeanDefinitions(mock(), context.getDefaultListableBeanFactory()); RootBeanDefinition channelDefinition = new RootBeanDefinition(DirectChannel.class); context.registerBeanDefinition("input", channelDefinition); RootBeanDefinition testBeanDefinition = new RootBeanDefinition(TestBean.class); @@ -75,8 +75,7 @@ public class SubscriberOrderTests { @Test public void directChannelAndFailoverDispatcherWithMultipleCallsPerMethod() { try (GenericApplicationContext context = TestUtils.createTestApplicationContext()) { - context.registerBeanDefinition("postProcessor", - new RootBeanDefinition(MessagingAnnotationPostProcessor.class)); + new IntegrationRegistrar().registerBeanDefinitions(mock(), context.getDefaultListableBeanFactory()); BeanDefinitionBuilder channelBuilder = BeanDefinitionBuilder.rootBeanDefinition(DirectChannel.class); channelBuilder.addConstructorArgValue(null); RootBeanDefinition channelDefinition = (RootBeanDefinition) channelBuilder.getBeanDefinition(); @@ -118,8 +117,7 @@ public class SubscriberOrderTests { @Test public void directChannelAndRoundRobinDispatcher() { try (GenericApplicationContext context = TestUtils.createTestApplicationContext()) { - context.registerBeanDefinition("postProcessor", - new RootBeanDefinition(MessagingAnnotationPostProcessor.class)); + new IntegrationRegistrar().registerBeanDefinitions(mock(), context.getDefaultListableBeanFactory()); RootBeanDefinition channelDefinition = new RootBeanDefinition(DirectChannel.class); channelDefinition.getConstructorArgumentValues() .addGenericArgumentValue(new RoundRobinLoadBalancingStrategy()); diff --git a/spring-integration-ip/src/test/java/org/springframework/integration/ip/tcp/connection/TcpNioConnectionTests.java b/spring-integration-ip/src/test/java/org/springframework/integration/ip/tcp/connection/TcpNioConnectionTests.java index 183bc640f0..12dc1610b5 100644 --- a/spring-integration-ip/src/test/java/org/springframework/integration/ip/tcp/connection/TcpNioConnectionTests.java +++ b/spring-integration-ip/src/test/java/org/springframework/integration/ip/tcp/connection/TcpNioConnectionTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -835,7 +835,7 @@ public class TcpNioConnectionTests { assertThat(reading.await(10, TimeUnit.SECONDS)).isTrue(); socket.close(); cf.stop(); - assertThat(watch.getLastTaskTimeMillis()).isLessThan(950L); + assertThat(watch.lastTaskInfo().getTimeMillis()).isLessThan(950L); } @Test