Avoid using reflection with manual bean definitions
Closes gh-22318
This commit is contained in:
@@ -22,6 +22,7 @@ import java.util.Collections;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
@@ -29,7 +30,6 @@ import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.config.ConstructorArgumentValues;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
||||
import org.springframework.boot.context.annotation.DeterminableImports;
|
||||
@@ -92,27 +92,14 @@ public abstract class AutoConfigurationPackages {
|
||||
*/
|
||||
public static void register(BeanDefinitionRegistry registry, String... packageNames) {
|
||||
if (registry.containsBeanDefinition(BEAN)) {
|
||||
BeanDefinition beanDefinition = registry.getBeanDefinition(BEAN);
|
||||
ConstructorArgumentValues constructorArguments = beanDefinition.getConstructorArgumentValues();
|
||||
constructorArguments.addIndexedArgumentValue(0, addBasePackages(constructorArguments, packageNames));
|
||||
BasePackagesBeanDefinition beanDefinition = (BasePackagesBeanDefinition) registry.getBeanDefinition(BEAN);
|
||||
beanDefinition.addBasePackages(packageNames);
|
||||
}
|
||||
else {
|
||||
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
|
||||
beanDefinition.setBeanClass(BasePackages.class);
|
||||
beanDefinition.getConstructorArgumentValues().addIndexedArgumentValue(0, packageNames);
|
||||
beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
registry.registerBeanDefinition(BEAN, beanDefinition);
|
||||
registry.registerBeanDefinition(BEAN, new BasePackagesBeanDefinition(packageNames));
|
||||
}
|
||||
}
|
||||
|
||||
private static String[] addBasePackages(ConstructorArgumentValues constructorArguments, String[] packageNames) {
|
||||
String[] existing = (String[]) constructorArguments.getIndexedArgumentValue(0, String[].class).getValue();
|
||||
Set<String> merged = new LinkedHashSet<>();
|
||||
merged.addAll(Arrays.asList(existing));
|
||||
merged.addAll(Arrays.asList(packageNames));
|
||||
return StringUtils.toStringArray(merged);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link ImportBeanDefinitionRegistrar} to store the base package from the importing
|
||||
* configuration.
|
||||
@@ -217,4 +204,25 @@ public abstract class AutoConfigurationPackages {
|
||||
|
||||
}
|
||||
|
||||
static final class BasePackagesBeanDefinition extends GenericBeanDefinition {
|
||||
|
||||
private Set<String> basePackages = new LinkedHashSet<>();
|
||||
|
||||
BasePackagesBeanDefinition(String... basePackages) {
|
||||
setBeanClass(BasePackages.class);
|
||||
setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
addBasePackages(basePackages);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Supplier<?> getInstanceSupplier() {
|
||||
return () -> new BasePackages(StringUtils.toStringArray(this.basePackages));
|
||||
}
|
||||
|
||||
private void addBasePackages(String[] additionalBasePackages) {
|
||||
this.basePackages.addAll(Arrays.asList(additionalBasePackages));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -23,11 +23,11 @@ import java.util.Collections;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.config.ConstructorArgumentValues;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
||||
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
|
||||
@@ -109,29 +109,15 @@ public class EntityScanPackages {
|
||||
Assert.notNull(registry, "Registry must not be null");
|
||||
Assert.notNull(packageNames, "PackageNames must not be null");
|
||||
if (registry.containsBeanDefinition(BEAN)) {
|
||||
BeanDefinition beanDefinition = registry.getBeanDefinition(BEAN);
|
||||
ConstructorArgumentValues constructorArguments = beanDefinition.getConstructorArgumentValues();
|
||||
constructorArguments.addIndexedArgumentValue(0, addPackageNames(constructorArguments, packageNames));
|
||||
EntityScanPackagesBeanDefinition beanDefinition = (EntityScanPackagesBeanDefinition) registry
|
||||
.getBeanDefinition(BEAN);
|
||||
beanDefinition.addPackageNames(packageNames);
|
||||
}
|
||||
else {
|
||||
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
|
||||
beanDefinition.setBeanClass(EntityScanPackages.class);
|
||||
beanDefinition.getConstructorArgumentValues().addIndexedArgumentValue(0,
|
||||
StringUtils.toStringArray(packageNames));
|
||||
beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
registry.registerBeanDefinition(BEAN, beanDefinition);
|
||||
registry.registerBeanDefinition(BEAN, new EntityScanPackagesBeanDefinition(packageNames));
|
||||
}
|
||||
}
|
||||
|
||||
private static String[] addPackageNames(ConstructorArgumentValues constructorArguments,
|
||||
Collection<String> packageNames) {
|
||||
String[] existing = (String[]) constructorArguments.getIndexedArgumentValue(0, String[].class).getValue();
|
||||
Set<String> merged = new LinkedHashSet<>();
|
||||
merged.addAll(Arrays.asList(existing));
|
||||
merged.addAll(packageNames);
|
||||
return StringUtils.toStringArray(merged);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link ImportBeanDefinitionRegistrar} to store the base package from the importing
|
||||
* configuration.
|
||||
@@ -162,4 +148,25 @@ public class EntityScanPackages {
|
||||
|
||||
}
|
||||
|
||||
static class EntityScanPackagesBeanDefinition extends GenericBeanDefinition {
|
||||
|
||||
private Set<String> packageNames = new LinkedHashSet<>();
|
||||
|
||||
EntityScanPackagesBeanDefinition(Collection<String> packageNames) {
|
||||
setBeanClass(EntityScanPackages.class);
|
||||
setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
addPackageNames(packageNames);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Supplier<?> getInstanceSupplier() {
|
||||
return () -> new EntityScanPackages(StringUtils.toStringArray(this.packageNames));
|
||||
}
|
||||
|
||||
private void addPackageNames(Collection<String> additionalPackageNames) {
|
||||
this.packageNames.addAll(additionalPackageNames);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,8 +17,9 @@
|
||||
package org.springframework.boot.autoconfigure.jdbc;
|
||||
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
|
||||
@@ -46,8 +47,10 @@ class DataSourceInitializationConfiguration {
|
||||
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
|
||||
BeanDefinitionRegistry registry) {
|
||||
if (!registry.containsBeanDefinition(BEAN_NAME)) {
|
||||
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
|
||||
beanDefinition.setBeanClass(DataSourceInitializerPostProcessor.class);
|
||||
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder
|
||||
.genericBeanDefinition(DataSourceInitializerPostProcessor.class,
|
||||
DataSourceInitializerPostProcessor::new)
|
||||
.getBeanDefinition();
|
||||
beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
// We don't need this one to be post processed otherwise it can cause a
|
||||
// cascade of bean instantiation that we would rather avoid.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -29,8 +29,9 @@ import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.config.BeanPostProcessor;
|
||||
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceSchemaCreatedEvent;
|
||||
import org.springframework.boot.jdbc.EmbeddedDatabaseConnection;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
@@ -133,8 +134,8 @@ class DataSourceInitializedPublisher implements BeanPostProcessor {
|
||||
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
|
||||
BeanDefinitionRegistry registry) {
|
||||
if (!registry.containsBeanDefinition(BEAN_NAME)) {
|
||||
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
|
||||
beanDefinition.setBeanClass(DataSourceInitializedPublisher.class);
|
||||
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(
|
||||
DataSourceInitializedPublisher.class, DataSourceInitializedPublisher::new).getBeanDefinition();
|
||||
beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
// We don't need this one to be post processed otherwise it can cause a
|
||||
// cascade of bean instantiation that we would rather avoid.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -21,8 +21,8 @@ import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
||||
import org.springframework.boot.context.properties.source.ConfigurationProperty;
|
||||
import org.springframework.boot.context.properties.source.ConfigurationPropertyName;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
@@ -81,8 +81,9 @@ public class BoundConfigurationProperties {
|
||||
static void register(BeanDefinitionRegistry registry) {
|
||||
Assert.notNull(registry, "Registry must not be null");
|
||||
if (!registry.containsBeanDefinition(BEAN_NAME)) {
|
||||
GenericBeanDefinition definition = new GenericBeanDefinition();
|
||||
definition.setBeanClass(BoundConfigurationProperties.class);
|
||||
BeanDefinition definition = BeanDefinitionBuilder
|
||||
.genericBeanDefinition(BoundConfigurationProperties.class, BoundConfigurationProperties::new)
|
||||
.getBeanDefinition();
|
||||
definition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
registry.registerBeanDefinition(BEAN_NAME, definition);
|
||||
}
|
||||
|
||||
@@ -24,8 +24,8 @@ import java.util.Map;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
@@ -83,8 +83,8 @@ public class ConfigurationBeanFactoryMetadata implements ApplicationContextAware
|
||||
|
||||
static void register(BeanDefinitionRegistry registry) {
|
||||
if (!registry.containsBeanDefinition(BEAN_NAME)) {
|
||||
GenericBeanDefinition definition = new GenericBeanDefinition();
|
||||
definition.setBeanClass(ConfigurationBeanFactoryMetadata.class);
|
||||
BeanDefinition definition = BeanDefinitionBuilder.genericBeanDefinition(
|
||||
ConfigurationBeanFactoryMetadata.class, ConfigurationBeanFactoryMetadata::new).getBeanDefinition();
|
||||
definition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
registry.registerBeanDefinition(ConfigurationBeanFactoryMetadata.BEAN_NAME, definition);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -26,8 +26,10 @@ import org.springframework.beans.PropertyEditorRegistry;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.FactoryBean;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
||||
import org.springframework.boot.context.properties.bind.BindHandler;
|
||||
import org.springframework.boot.context.properties.bind.BindResult;
|
||||
import org.springframework.boot.context.properties.bind.Bindable;
|
||||
@@ -186,17 +188,20 @@ class ConfigurationPropertiesBinder {
|
||||
|
||||
static void register(BeanDefinitionRegistry registry) {
|
||||
if (!registry.containsBeanDefinition(FACTORY_BEAN_NAME)) {
|
||||
GenericBeanDefinition definition = new GenericBeanDefinition();
|
||||
definition.setBeanClass(ConfigurationPropertiesBinder.Factory.class);
|
||||
AbstractBeanDefinition definition = BeanDefinitionBuilder
|
||||
.genericBeanDefinition(ConfigurationPropertiesBinder.Factory.class,
|
||||
ConfigurationPropertiesBinder.Factory::new)
|
||||
.getBeanDefinition();
|
||||
definition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
registry.registerBeanDefinition(ConfigurationPropertiesBinder.FACTORY_BEAN_NAME, definition);
|
||||
}
|
||||
if (!registry.containsBeanDefinition(BEAN_NAME)) {
|
||||
GenericBeanDefinition definition = new GenericBeanDefinition();
|
||||
definition.setBeanClass(ConfigurationPropertiesBinder.class);
|
||||
AbstractBeanDefinition definition = BeanDefinitionBuilder
|
||||
.genericBeanDefinition(ConfigurationPropertiesBinder.class,
|
||||
() -> ((DefaultListableBeanFactory) registry)
|
||||
.getBean(FACTORY_BEAN_NAME, ConfigurationPropertiesBinder.Factory.class).create())
|
||||
.getBeanDefinition();
|
||||
definition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
definition.setFactoryBeanName(FACTORY_BEAN_NAME);
|
||||
definition.setFactoryMethodName("create");
|
||||
registry.registerBeanDefinition(ConfigurationPropertiesBinder.BEAN_NAME, definition);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,8 +20,8 @@ import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.config.BeanPostProcessor;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
||||
import org.springframework.boot.context.properties.ConfigurationPropertiesBean.BindMethod;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
@@ -107,8 +107,10 @@ public class ConfigurationPropertiesBindingPostProcessor
|
||||
public static void register(BeanDefinitionRegistry registry) {
|
||||
Assert.notNull(registry, "Registry must not be null");
|
||||
if (!registry.containsBeanDefinition(BEAN_NAME)) {
|
||||
GenericBeanDefinition definition = new GenericBeanDefinition();
|
||||
definition.setBeanClass(ConfigurationPropertiesBindingPostProcessor.class);
|
||||
BeanDefinition definition = BeanDefinitionBuilder
|
||||
.genericBeanDefinition(ConfigurationPropertiesBindingPostProcessor.class,
|
||||
ConfigurationPropertiesBindingPostProcessor::new)
|
||||
.getBeanDefinition();
|
||||
definition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
registry.registerBeanDefinition(BEAN_NAME, definition);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,11 +17,12 @@
|
||||
package org.springframework.boot.web.servlet;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.config.ConstructorArgumentValues.ValueHolder;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
||||
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
|
||||
@@ -52,20 +53,15 @@ class ServletComponentScanRegistrar implements ImportBeanDefinitionRegistrar {
|
||||
}
|
||||
|
||||
private void updatePostProcessor(BeanDefinitionRegistry registry, Set<String> packagesToScan) {
|
||||
BeanDefinition definition = registry.getBeanDefinition(BEAN_NAME);
|
||||
ValueHolder constructorArguments = definition.getConstructorArgumentValues().getGenericArgumentValue(Set.class);
|
||||
@SuppressWarnings("unchecked")
|
||||
Set<String> mergedPackages = (Set<String>) constructorArguments.getValue();
|
||||
mergedPackages.addAll(packagesToScan);
|
||||
constructorArguments.setValue(mergedPackages);
|
||||
ServletComponentRegisteringPostProcessorBeanDefinition definition = (ServletComponentRegisteringPostProcessorBeanDefinition) registry
|
||||
.getBeanDefinition(BEAN_NAME);
|
||||
definition.addPackageNames(packagesToScan);
|
||||
}
|
||||
|
||||
private void addPostProcessor(BeanDefinitionRegistry registry, Set<String> packagesToScan) {
|
||||
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
|
||||
beanDefinition.setBeanClass(ServletComponentRegisteringPostProcessor.class);
|
||||
beanDefinition.getConstructorArgumentValues().addGenericArgumentValue(packagesToScan);
|
||||
beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
registry.registerBeanDefinition(BEAN_NAME, beanDefinition);
|
||||
ServletComponentRegisteringPostProcessorBeanDefinition definition = new ServletComponentRegisteringPostProcessorBeanDefinition(
|
||||
packagesToScan);
|
||||
registry.registerBeanDefinition(BEAN_NAME, definition);
|
||||
}
|
||||
|
||||
private Set<String> getPackagesToScan(AnnotationMetadata metadata) {
|
||||
@@ -83,4 +79,25 @@ class ServletComponentScanRegistrar implements ImportBeanDefinitionRegistrar {
|
||||
return packagesToScan;
|
||||
}
|
||||
|
||||
static final class ServletComponentRegisteringPostProcessorBeanDefinition extends GenericBeanDefinition {
|
||||
|
||||
private Set<String> packageNames = new LinkedHashSet<>();
|
||||
|
||||
ServletComponentRegisteringPostProcessorBeanDefinition(Collection<String> packageNames) {
|
||||
setBeanClass(ServletComponentRegisteringPostProcessor.class);
|
||||
setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
addPackageNames(packageNames);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Supplier<?> getInstanceSupplier() {
|
||||
return () -> new ServletComponentRegisteringPostProcessor(this.packageNames);
|
||||
}
|
||||
|
||||
private void addPackageNames(Collection<String> additionalPackageNames) {
|
||||
this.packageNames.addAll(additionalPackageNames);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user