Commit 9fb9a67c authored by Stephane Nicoll's avatar Stephane Nicoll

Avoid early initializations

This commit flags the two `BeanPostProcessors` registered by the
embedded support as `synthetic` so that they don't trigger an early
initialization of other components.

Closes gh-8467
parent dac3810b
/* /*
* Copyright 2012-2016 the original author or authors. * Copyright 2012-2017 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -58,6 +58,7 @@ import org.springframework.util.ObjectUtils; ...@@ -58,6 +58,7 @@ import org.springframework.util.ObjectUtils;
* @author Phillip Webb * @author Phillip Webb
* @author Dave Syer * @author Dave Syer
* @author Ivan Sopov * @author Ivan Sopov
* @author Stephane Nicoll
*/ */
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
@Configuration @Configuration
...@@ -136,17 +137,21 @@ public class EmbeddedServletContainerAutoConfiguration { ...@@ -136,17 +137,21 @@ public class EmbeddedServletContainerAutoConfiguration {
if (ObjectUtils.isEmpty(this.beanFactory.getBeanNamesForType( if (ObjectUtils.isEmpty(this.beanFactory.getBeanNamesForType(
EmbeddedServletContainerCustomizerBeanPostProcessor.class, true, EmbeddedServletContainerCustomizerBeanPostProcessor.class, true,
false))) { false))) {
RootBeanDefinition beanDefinition = new RootBeanDefinition(
EmbeddedServletContainerCustomizerBeanPostProcessor.class);
beanDefinition.setSynthetic(true);
registry.registerBeanDefinition( registry.registerBeanDefinition(
"embeddedServletContainerCustomizerBeanPostProcessor", "embeddedServletContainerCustomizerBeanPostProcessor",
new RootBeanDefinition( beanDefinition);
EmbeddedServletContainerCustomizerBeanPostProcessor.class));
} }
if (ObjectUtils.isEmpty(this.beanFactory.getBeanNamesForType( if (ObjectUtils.isEmpty(this.beanFactory.getBeanNamesForType(
ErrorPageRegistrarBeanPostProcessor.class, true, false))) { ErrorPageRegistrarBeanPostProcessor.class, true, false))) {
RootBeanDefinition beanDefinition = new RootBeanDefinition(
ErrorPageRegistrarBeanPostProcessor.class);
beanDefinition.setSynthetic(true);
registry.registerBeanDefinition("errorPageRegistrarBeanPostProcessor", registry.registerBeanDefinition("errorPageRegistrarBeanPostProcessor",
new RootBeanDefinition( beanDefinition);
ErrorPageRegistrarBeanPostProcessor.class));
} }
} }
......
/* /*
* Copyright 2012-2014 the original author or authors. * Copyright 2012-2017 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -22,9 +22,10 @@ import java.util.Collections; ...@@ -22,9 +22,10 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.core.annotation.AnnotationAwareOrderComparator;
/** /**
...@@ -33,18 +34,18 @@ import org.springframework.core.annotation.AnnotationAwareOrderComparator; ...@@ -33,18 +34,18 @@ import org.springframework.core.annotation.AnnotationAwareOrderComparator;
* *
* @author Dave Syer * @author Dave Syer
* @author Phillip Webb * @author Phillip Webb
* @author Stephane Nicoll
*/ */
public class EmbeddedServletContainerCustomizerBeanPostProcessor public class EmbeddedServletContainerCustomizerBeanPostProcessor
implements BeanPostProcessor, ApplicationContextAware { implements BeanPostProcessor, BeanFactoryAware {
private ApplicationContext applicationContext; private ListableBeanFactory beanFactory;
private List<EmbeddedServletContainerCustomizer> customizers; private List<EmbeddedServletContainerCustomizer> customizers;
@Override @Override
public void setApplicationContext(ApplicationContext applicationContext) public void setBeanFactory(BeanFactory beanFactory) {
throws BeansException { this.beanFactory = (ListableBeanFactory) beanFactory;
this.applicationContext = applicationContext;
} }
@Override @Override
...@@ -73,7 +74,7 @@ public class EmbeddedServletContainerCustomizerBeanPostProcessor ...@@ -73,7 +74,7 @@ public class EmbeddedServletContainerCustomizerBeanPostProcessor
if (this.customizers == null) { if (this.customizers == null) {
// Look up does not include the parent context // Look up does not include the parent context
this.customizers = new ArrayList<EmbeddedServletContainerCustomizer>( this.customizers = new ArrayList<EmbeddedServletContainerCustomizer>(
this.applicationContext this.beanFactory
.getBeansOfType(EmbeddedServletContainerCustomizer.class, .getBeansOfType(EmbeddedServletContainerCustomizer.class,
false, false) false, false)
.values()); .values());
......
/* /*
* Copyright 2012-2016 the original author or authors. * Copyright 2012-2017 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -22,9 +22,10 @@ import java.util.Collections; ...@@ -22,9 +22,10 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.core.annotation.AnnotationAwareOrderComparator;
/** /**
...@@ -32,19 +33,19 @@ import org.springframework.core.annotation.AnnotationAwareOrderComparator; ...@@ -32,19 +33,19 @@ import org.springframework.core.annotation.AnnotationAwareOrderComparator;
* factory to {@link ErrorPageRegistry} beans. * factory to {@link ErrorPageRegistry} beans.
* *
* @author Phillip Webb * @author Phillip Webb
* @author Stephane Nicoll
* @since 1.4.0 * @since 1.4.0
*/ */
public class ErrorPageRegistrarBeanPostProcessor public class ErrorPageRegistrarBeanPostProcessor
implements BeanPostProcessor, ApplicationContextAware { implements BeanPostProcessor, BeanFactoryAware {
private ApplicationContext applicationContext; private ListableBeanFactory beanFactory;
private List<ErrorPageRegistrar> registrars; private List<ErrorPageRegistrar> registrars;
@Override @Override
public void setApplicationContext(ApplicationContext applicationContext) public void setBeanFactory(BeanFactory beanFactory) {
throws BeansException { this.beanFactory = (ListableBeanFactory) beanFactory;
this.applicationContext = applicationContext;
} }
@Override @Override
...@@ -71,7 +72,7 @@ public class ErrorPageRegistrarBeanPostProcessor ...@@ -71,7 +72,7 @@ public class ErrorPageRegistrarBeanPostProcessor
private Collection<ErrorPageRegistrar> getRegistrars() { private Collection<ErrorPageRegistrar> getRegistrars() {
if (this.registrars == null) { if (this.registrars == null) {
// Look up does not include the parent context // Look up does not include the parent context
this.registrars = new ArrayList<ErrorPageRegistrar>(this.applicationContext this.registrars = new ArrayList<ErrorPageRegistrar>(this.beanFactory
.getBeansOfType(ErrorPageRegistrar.class, false, false).values()); .getBeansOfType(ErrorPageRegistrar.class, false, false).values());
Collections.sort(this.registrars, AnnotationAwareOrderComparator.INSTANCE); Collections.sort(this.registrars, AnnotationAwareOrderComparator.INSTANCE);
this.registrars = Collections.unmodifiableList(this.registrars); this.registrars = Collections.unmodifiableList(this.registrars);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment