diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAutoConfiguration.java index e04fff99cd..614c646366 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAutoConfiguration.java @@ -134,25 +134,21 @@ public class EmbeddedServletContainerAutoConfiguration { if (this.beanFactory == null) { return; } - if (ObjectUtils.isEmpty(this.beanFactory.getBeanNamesForType( - EmbeddedServletContainerCustomizerBeanPostProcessor.class, true, - false))) { - RootBeanDefinition beanDefinition = new RootBeanDefinition( - EmbeddedServletContainerCustomizerBeanPostProcessor.class); - beanDefinition.setSynthetic(true); - registry.registerBeanDefinition( - "embeddedServletContainerCustomizerBeanPostProcessor", - beanDefinition); + registerSyntheticBeanIfMissing(registry, + "embeddedServletContainerCustomizerBeanPostProcessor", + EmbeddedServletContainerCustomizerBeanPostProcessor.class); + registerSyntheticBeanIfMissing(registry, + "errorPageRegistrarBeanPostProcessor", + ErrorPageRegistrarBeanPostProcessor.class); + } - } - if (ObjectUtils.isEmpty(this.beanFactory.getBeanNamesForType( - ErrorPageRegistrarBeanPostProcessor.class, true, false))) { - RootBeanDefinition beanDefinition = new RootBeanDefinition( - ErrorPageRegistrarBeanPostProcessor.class); + private void registerSyntheticBeanIfMissing(BeanDefinitionRegistry registry, + String name, Class beanClass) { + if (ObjectUtils.isEmpty( + this.beanFactory.getBeanNamesForType(beanClass, true, false))) { + RootBeanDefinition beanDefinition = new RootBeanDefinition(beanClass); beanDefinition.setSynthetic(true); - registry.registerBeanDefinition("errorPageRegistrarBeanPostProcessor", - beanDefinition); - + registry.registerBeanDefinition(name, beanDefinition); } } diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainerCustomizerBeanPostProcessor.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainerCustomizerBeanPostProcessor.java index e4b41309db..329f4e3c0d 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainerCustomizerBeanPostProcessor.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedServletContainerCustomizerBeanPostProcessor.java @@ -27,6 +27,7 @@ import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.core.annotation.AnnotationAwareOrderComparator; +import org.springframework.util.Assert; /** * {@link BeanPostProcessor} that applies all {@link EmbeddedServletContainerCustomizer}s @@ -45,6 +46,9 @@ public class EmbeddedServletContainerCustomizerBeanPostProcessor @Override public void setBeanFactory(BeanFactory beanFactory) { + Assert.isInstanceOf(ListableBeanFactory.class, beanFactory, + "EmbeddedServletContainerCustomizerBeanPostProcessor can only be used " + + "with a ListableBeanFactory"); this.beanFactory = (ListableBeanFactory) beanFactory; } diff --git a/spring-boot/src/main/java/org/springframework/boot/web/servlet/ErrorPageRegistrarBeanPostProcessor.java b/spring-boot/src/main/java/org/springframework/boot/web/servlet/ErrorPageRegistrarBeanPostProcessor.java index 292a096a89..f314cafe0f 100644 --- a/spring-boot/src/main/java/org/springframework/boot/web/servlet/ErrorPageRegistrarBeanPostProcessor.java +++ b/spring-boot/src/main/java/org/springframework/boot/web/servlet/ErrorPageRegistrarBeanPostProcessor.java @@ -27,6 +27,7 @@ import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.core.annotation.AnnotationAwareOrderComparator; +import org.springframework.util.Assert; /** * {@link BeanPostProcessor} that applies all {@link ErrorPageRegistrar}s from the bean @@ -45,6 +46,9 @@ public class ErrorPageRegistrarBeanPostProcessor @Override public void setBeanFactory(BeanFactory beanFactory) { + Assert.isInstanceOf(ListableBeanFactory.class, beanFactory, + "ErrorPageRegistrarBeanPostProcessor can only be used " + + "with a ListableBeanFactory"); this.beanFactory = (ListableBeanFactory) beanFactory; }