Skip to content

Commit e695b4a

Browse files
committed
Use Registrar to register BeanPostProcessors
Use a ImportBeanDefinitionRegistrar to register BeanPostProcessors rather than using @bean definitions. Prevents warnings about beans not having all BeanPostProcessors applied.
1 parent 1327221 commit e695b4a

File tree

5 files changed

+243
-169
lines changed

5 files changed

+243
-169
lines changed

spring-autoconfigure/src/main/java/org/springframework/autoconfigure/web/EmbeddedServletContainerAutoConfiguration.java

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,29 @@
2222
import org.eclipse.jetty.server.Server;
2323
import org.eclipse.jetty.util.Loader;
2424
import org.springframework.autoconfigure.EnableAutoConfiguration;
25+
import org.springframework.autoconfigure.web.EmbeddedServletContainerAutoConfiguration.EmbeddedServletContainerCustomizerBeanPostProcessorRegistrar;
26+
import org.springframework.beans.BeansException;
27+
import org.springframework.beans.factory.BeanFactory;
28+
import org.springframework.beans.factory.BeanFactoryAware;
29+
import org.springframework.beans.factory.config.BeanDefinition;
30+
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
31+
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
32+
import org.springframework.beans.factory.support.RootBeanDefinition;
2533
import org.springframework.bootstrap.context.condition.ConditionalOnClass;
2634
import org.springframework.bootstrap.context.condition.ConditionalOnMissingBean;
2735
import org.springframework.bootstrap.context.condition.SearchStrategy;
28-
import org.springframework.bootstrap.context.embedded.EmbeddedServletContainerCustomizer;
2936
import org.springframework.bootstrap.context.embedded.EmbeddedServletContainerCustomizerBeanPostProcessor;
3037
import org.springframework.bootstrap.context.embedded.EmbeddedServletContainerFactory;
3138
import org.springframework.bootstrap.context.embedded.ServletContextInitializer;
3239
import org.springframework.bootstrap.context.embedded.jetty.JettyEmbeddedServletContainerFactory;
3340
import org.springframework.bootstrap.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
3441
import org.springframework.context.annotation.Bean;
3542
import org.springframework.context.annotation.Configuration;
43+
import org.springframework.context.annotation.Import;
44+
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
3645
import org.springframework.core.Ordered;
3746
import org.springframework.core.annotation.Order;
47+
import org.springframework.core.type.AnnotationMetadata;
3848
import org.springframework.web.servlet.DispatcherServlet;
3949

4050
/**
@@ -44,18 +54,10 @@
4454
* @author Dave Syer
4555
*/
4656
@Order(Ordered.HIGHEST_PRECEDENCE)
57+
@Configuration
58+
@Import(EmbeddedServletContainerCustomizerBeanPostProcessorRegistrar.class)
4759
public class EmbeddedServletContainerAutoConfiguration {
4860

49-
/**
50-
* Support {@link EmbeddedServletContainerCustomizerBeanPostProcessor} to apply
51-
* {@link EmbeddedServletContainerCustomizer}s.
52-
*/
53-
@Bean
54-
@ConditionalOnMissingBean(value = EmbeddedServletContainerCustomizerBeanPostProcessor.class, search = SearchStrategy.CURRENT)
55-
public EmbeddedServletContainerCustomizerBeanPostProcessor embeddedServletContainerCustomizerBeanPostProcessor() {
56-
return new EmbeddedServletContainerCustomizerBeanPostProcessor();
57-
}
58-
5961
/**
6062
* Add the {@link DispatcherServlet} unless the user has defined their own
6163
* {@link ServletContextInitializer}s.
@@ -101,4 +103,35 @@ public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory
101103

102104
}
103105

106+
/**
107+
* Registers a {@link EmbeddedServletContainerCustomizerBeanPostProcessor}. Registered
108+
* via {@link ImportBeanDefinitionRegistrar} for early registration.
109+
*/
110+
public static class EmbeddedServletContainerCustomizerBeanPostProcessorRegistrar
111+
implements ImportBeanDefinitionRegistrar, BeanFactoryAware {
112+
113+
private ConfigurableListableBeanFactory beanFactory;
114+
115+
@Override
116+
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
117+
if (beanFactory instanceof ConfigurableListableBeanFactory) {
118+
this.beanFactory = (ConfigurableListableBeanFactory) beanFactory;
119+
}
120+
}
121+
122+
@Override
123+
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
124+
BeanDefinitionRegistry registry) {
125+
if (this.beanFactory != null
126+
&& this.beanFactory.getBeansOfType(
127+
EmbeddedServletContainerCustomizerBeanPostProcessor.class)
128+
.size() == 0) {
129+
BeanDefinition beanDefinition = new RootBeanDefinition(
130+
EmbeddedServletContainerCustomizerBeanPostProcessor.class);
131+
registry.registerBeanDefinition(
132+
"embeddedServletContainerCustomizerBeanPostProcessor",
133+
beanDefinition);
134+
}
135+
}
136+
}
104137
}

spring-bootstrap/src/main/java/org/springframework/bootstrap/context/properties/ConfigurationPropertiesBindingConfiguration.java

Lines changed: 0 additions & 151 deletions
This file was deleted.

0 commit comments

Comments
 (0)