diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/IntegrationComponentScanRegistrar.java b/spring-integration-core/src/main/java/org/springframework/integration/config/IntegrationComponentScanRegistrar.java index 79b7b5a81b..32c5c19fc7 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/IntegrationComponentScanRegistrar.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/IntegrationComponentScanRegistrar.java @@ -67,8 +67,7 @@ import org.springframework.util.StringUtils; public class IntegrationComponentScanRegistrar implements ImportBeanDefinitionRegistrar, ResourceLoaderAware, EnvironmentAware { - private final Map componentRegistrars = - new HashMap(); + private final Map componentRegistrars = new HashMap<>(); private ResourceLoader resourceLoader; @@ -109,6 +108,11 @@ public class IntegrationComponentScanRegistrar implements ImportBeanDefinitionRe && !beanDefinition.getMetadata().isAnnotation(); } + @Override + protected BeanDefinitionRegistry getRegistry() { + return registry; + } + }; filter(registry, componentScan, scanner); // NOSONAR - never null @@ -163,7 +167,7 @@ public class IntegrationComponentScanRegistrar implements ImportBeanDefinitionRe } } - for (Class clazz : (Class[]) componentScan.get("basePackageClasses")) { + for (Class clazz : (Class[]) componentScan.get("basePackageClasses")) { basePackages.add(ClassUtils.getPackageName(clazz)); } @@ -216,10 +220,13 @@ public class IntegrationComponentScanRegistrar implements ImportBeanDefinitionRe private static void invokeAwareMethods(Object parserStrategyBean, Environment environment, ResourceLoader resourceLoader, BeanDefinitionRegistry registry) { + if (parserStrategyBean instanceof Aware) { if (parserStrategyBean instanceof BeanClassLoaderAware) { - ClassLoader classLoader = (registry instanceof ConfigurableBeanFactory ? - ((ConfigurableBeanFactory) registry).getBeanClassLoader() : resourceLoader.getClassLoader()); + ClassLoader classLoader = + registry instanceof ConfigurableBeanFactory + ? ((ConfigurableBeanFactory) registry).getBeanClassLoader() + : resourceLoader.getClassLoader(); if (classLoader != null) { ((BeanClassLoaderAware) parserStrategyBean).setBeanClassLoader(classLoader); } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/configuration/EnableIntegrationTests.java b/spring-integration-core/src/test/java/org/springframework/integration/configuration/EnableIntegrationTests.java index 2f9d51bd25..daaa975aed 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/configuration/EnableIntegrationTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/configuration/EnableIntegrationTests.java @@ -17,7 +17,8 @@ package org.springframework.integration.configuration; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.fail; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; @@ -43,6 +44,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.FactoryBean; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.config.AbstractFactoryBean; @@ -53,12 +55,16 @@ import org.springframework.context.SmartLifecycle; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Condition; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; import org.springframework.context.expression.EnvironmentAccessor; import org.springframework.context.expression.MapAccessor; import org.springframework.core.convert.converter.Converter; import org.springframework.core.serializer.support.SerializingConverter; +import org.springframework.core.type.AnnotatedTypeMetadata; import org.springframework.expression.EvaluationContext; import org.springframework.expression.spel.support.ReflectivePropertyAccessor; import org.springframework.expression.spel.support.StandardEvaluationContext; @@ -432,15 +438,11 @@ public class EnableIntegrationTests { @Test @DirtiesContext public void testChangePatterns() { - try { - this.configurer.setComponentNamePatterns(new String[] { "*" }); - fail("ExpectedException"); - } - catch (IllegalStateException e) { - assertThat(e.getMessage()).contains("cannot be changed"); - } + assertThatIllegalStateException() + .isThrownBy(() -> this.configurer.setComponentNamePatterns(new String[]{ "*" })) + .withMessageContaining("cannot be changed"); this.configurer.stop(); - this.configurer.setComponentNamePatterns(new String[] { "*" }); + this.configurer.setComponentNamePatterns(new String[]{ "*" }); assertThat(TestUtils.getPropertyValue(this.configurer, "componentNamePatterns", String[].class)[0]) .isEqualTo("*"); } @@ -468,6 +470,9 @@ public class EnableIntegrationTests { this.testGateway.sendAsync("foo"); assertThat(this.asyncAnnotationProcessLatch.await(1, TimeUnit.SECONDS)).isTrue(); assertThat(this.asyncAnnotationProcessThread.get()).isNotSameAs(Thread.currentThread()); + + assertThatExceptionOfType(NoSuchBeanDefinitionException.class) + .isThrownBy(() -> this.context.getBean(ConditionalGateway.class)); } /** @@ -620,14 +625,10 @@ public class EnableIntegrationTests { assertThat(testMessage).isSameAs(receive); assertThat(this.pollableBridgeOutput.receive(10)).isNull(); - try { - this.metaBridgeInput.send(testMessage); - fail("MessageDeliveryException expected"); - } - catch (Exception e) { - assertThat(e).isInstanceOf(MessageDeliveryException.class); - assertThat(e.getMessage()).contains("Dispatcher has no subscribers"); - } + + assertThatExceptionOfType(MessageDeliveryException.class) + .isThrownBy(() -> this.metaBridgeInput.send(testMessage)) + .withMessageContaining("Dispatcher has no subscribers"); this.context.getBean("enableIntegrationTests.ContextConfiguration.metaBridgeOutput.bridgeFrom", Lifecycle.class).start(); @@ -652,14 +653,9 @@ public class EnableIntegrationTests { assertThat(bridgeMessage).isSameAs(receive); assertThat(replyChannel.receive(10)).isNull(); - try { - this.myBridgeToInput.send(testMessage); - fail("MessageDeliveryException expected"); - } - catch (Exception e) { - assertThat(e).isInstanceOf(MessageDeliveryException.class); - assertThat(e.getMessage()).contains("Dispatcher has no subscribers"); - } + assertThatExceptionOfType(MessageDeliveryException.class) + .isThrownBy(() -> this.myBridgeToInput.send(testMessage)) + .withMessageContaining("Dispatcher has no subscribers"); this.context.getBean("enableIntegrationTests.ContextConfiguration.myBridgeToInput.bridgeTo", Lifecycle.class).start(); @@ -762,7 +758,7 @@ public class EnableIntegrationTests { private PollableChannel myHandlerSuccessChannel; @Test - public void testAdvicedServiceActivator() { + public void testAdvisedServiceActivator() { Date testDate = new Date(); this.myHandlerChannel.send(new GenericMessage<>(testDate)); @@ -1411,6 +1407,14 @@ public class EnableIntegrationTests { } + @Conditional(TestCondition.class) + @MessagingGateway + public interface ConditionalGateway { + + void testGateway(Object payload); + + } + @TestMessagingGateway public interface TestGateway { @@ -1673,4 +1677,13 @@ public class EnableIntegrationTests { } + public static class TestCondition implements Condition { + + @Override + public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { + return context.getBeanFactory().containsBean("DoesNotExist"); + } + + } + }