Avoid reflection when creating manual RootBeanDefinitions
Closes gh-22318
This commit is contained in:
@@ -16,6 +16,8 @@
|
||||
|
||||
package org.springframework.boot.autoconfigure.web.reactive;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.BeanFactoryAware;
|
||||
@@ -100,12 +102,14 @@ public class ReactiveWebServerFactoryAutoConfiguration {
|
||||
return;
|
||||
}
|
||||
registerSyntheticBeanIfMissing(registry, "webServerFactoryCustomizerBeanPostProcessor",
|
||||
WebServerFactoryCustomizerBeanPostProcessor.class);
|
||||
WebServerFactoryCustomizerBeanPostProcessor.class,
|
||||
WebServerFactoryCustomizerBeanPostProcessor::new);
|
||||
}
|
||||
|
||||
private void registerSyntheticBeanIfMissing(BeanDefinitionRegistry registry, String name, Class<?> beanClass) {
|
||||
private <T> void registerSyntheticBeanIfMissing(BeanDefinitionRegistry registry, String name,
|
||||
Class<T> beanClass, Supplier<T> instanceSupplier) {
|
||||
if (ObjectUtils.isEmpty(this.beanFactory.getBeanNamesForType(beanClass, true, false))) {
|
||||
RootBeanDefinition beanDefinition = new RootBeanDefinition(beanClass);
|
||||
RootBeanDefinition beanDefinition = new RootBeanDefinition(beanClass, instanceSupplier);
|
||||
beanDefinition.setSynthetic(true);
|
||||
registry.registerBeanDefinition(name, beanDefinition);
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package org.springframework.boot.autoconfigure.web.servlet;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import javax.servlet.DispatcherType;
|
||||
import javax.servlet.ServletRequest;
|
||||
|
||||
@@ -111,14 +113,16 @@ public class ServletWebServerFactoryAutoConfiguration {
|
||||
return;
|
||||
}
|
||||
registerSyntheticBeanIfMissing(registry, "webServerFactoryCustomizerBeanPostProcessor",
|
||||
WebServerFactoryCustomizerBeanPostProcessor.class);
|
||||
WebServerFactoryCustomizerBeanPostProcessor.class,
|
||||
WebServerFactoryCustomizerBeanPostProcessor::new);
|
||||
registerSyntheticBeanIfMissing(registry, "errorPageRegistrarBeanPostProcessor",
|
||||
ErrorPageRegistrarBeanPostProcessor.class);
|
||||
ErrorPageRegistrarBeanPostProcessor.class, ErrorPageRegistrarBeanPostProcessor::new);
|
||||
}
|
||||
|
||||
private void registerSyntheticBeanIfMissing(BeanDefinitionRegistry registry, String name, Class<?> beanClass) {
|
||||
private <T> void registerSyntheticBeanIfMissing(BeanDefinitionRegistry registry, String name,
|
||||
Class<T> beanClass, Supplier<T> instanceSupplier) {
|
||||
if (ObjectUtils.isEmpty(this.beanFactory.getBeanNamesForType(beanClass, true, false))) {
|
||||
RootBeanDefinition beanDefinition = new RootBeanDefinition(beanClass);
|
||||
RootBeanDefinition beanDefinition = new RootBeanDefinition(beanClass, instanceSupplier);
|
||||
beanDefinition.setSynthetic(true);
|
||||
registry.registerBeanDefinition(name, beanDefinition);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user