From a899b37ac372e5e95009fb4551c0e30a524a28f6 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Fri, 5 Nov 2021 10:24:18 -0400 Subject: [PATCH] `DefaultConfiguringBFPP` to `BDRegistryPP` * Make a `DefaultConfiguringBeanFactoryPostProcessor` as a `BeanDefinitionRegistryPostProcessor` to let it be processed properly in Spring AOT * Register `DefaultConfiguringBeanFactoryPostProcessor` as a `BeanDefinition.ROLE_INFRASTRUCTURE`, so it is removed in Spring AOT after processing and writing target bean definitions --- ...ltConfiguringBeanFactoryPostProcessor.java | 54 +++++++++---------- .../config/IntegrationRegistrar.java | 7 ++- 2 files changed, 29 insertions(+), 32 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/DefaultConfiguringBeanFactoryPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/DefaultConfiguringBeanFactoryPostProcessor.java index d9d7eacb13..ff0335a658 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/DefaultConfiguringBeanFactoryPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/DefaultConfiguringBeanFactoryPostProcessor.java @@ -24,7 +24,6 @@ import java.util.Set; import java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy; import org.springframework.beans.BeansException; -import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.HierarchicalBeanFactory; import org.springframework.beans.factory.SmartInitializingSingleton; @@ -36,6 +35,7 @@ import org.springframework.beans.factory.parsing.BeanComponentDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; import org.springframework.beans.factory.support.ManagedList; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; @@ -83,7 +83,7 @@ import org.springframework.util.ClassUtils; * @see IntegrationContextUtils */ public class DefaultConfiguringBeanFactoryPostProcessor - implements BeanFactoryPostProcessor, BeanClassLoaderAware, SmartInitializingSingleton { + implements BeanDefinitionRegistryPostProcessor, SmartInitializingSingleton { private static final LogAccessor LOGGER = new LogAccessor(DefaultConfiguringBeanFactoryPostProcessor.class); @@ -119,38 +119,32 @@ public class DefaultConfiguringBeanFactoryPostProcessor } @Override - public void setBeanClassLoader(ClassLoader classLoader) { - this.classLoader = classLoader; + public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { + this.registry = registry; + this.beanFactory = (ConfigurableListableBeanFactory) registry; + this.classLoader = this.beanFactory.getBeanClassLoader(); + + registerBeanFactoryChannelResolver(); + registerMessagePublishingErrorHandler(); + registerNullChannel(); + registerErrorChannel(); + registerIntegrationEvaluationContext(); + registerTaskScheduler(); + registerIdGeneratorConfigurer(); + registerIntegrationProperties(); + registerBuiltInBeans(); + registerRoleController(); + registerMessageBuilderFactory(); + registerHeaderChannelRegistry(); + registerGlobalChannelInterceptorProcessor(); + registerDefaultDatatypeChannelMessageConverter(); + registerArgumentResolverMessageConverter(); + registerMessageHandlerMethodFactory(); + registerListMessageHandlerMethodFactory(); } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { - if (beanFactory instanceof BeanDefinitionRegistry) { - this.beanFactory = beanFactory; - this.registry = (BeanDefinitionRegistry) beanFactory; - - registerBeanFactoryChannelResolver(); - registerMessagePublishingErrorHandler(); - registerNullChannel(); - registerErrorChannel(); - registerIntegrationEvaluationContext(); - registerTaskScheduler(); - registerIdGeneratorConfigurer(); - registerIntegrationProperties(); - registerBuiltInBeans(); - registerRoleController(); - registerMessageBuilderFactory(); - registerHeaderChannelRegistry(); - registerGlobalChannelInterceptorProcessor(); - registerDefaultDatatypeChannelMessageConverter(); - registerArgumentResolverMessageConverter(); - registerMessageHandlerMethodFactory(); - registerListMessageHandlerMethodFactory(); - } - else { - LOGGER.warn("BeanFactory is not a BeanDefinitionRegistry. " + - "The default Spring Integration infrastructure beans are not going to be registered"); - } } @Override 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 9557ee234f..86445afc92 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 @@ -70,9 +70,12 @@ public class IntegrationRegistrar implements ImportBeanDefinitionRegistrar { */ private void registerDefaultConfiguringBeanFactoryPostProcessor(BeanDefinitionRegistry registry) { if (!registry.containsBeanDefinition(IntegrationContextUtils.DEFAULT_CONFIGURING_POSTPROCESSOR_BEAN_NAME)) { + BeanDefinitionBuilder postProcessorBuilder = + BeanDefinitionBuilder.genericBeanDefinition(DefaultConfiguringBeanFactoryPostProcessor.class, + DefaultConfiguringBeanFactoryPostProcessor::new) + .setRole(BeanDefinition.ROLE_INFRASTRUCTURE); registry.registerBeanDefinition(IntegrationContextUtils.DEFAULT_CONFIGURING_POSTPROCESSOR_BEAN_NAME, - new RootBeanDefinition(DefaultConfiguringBeanFactoryPostProcessor.class, - DefaultConfiguringBeanFactoryPostProcessor::new)); + postProcessorBuilder.getBeanDefinition()); } }