From 28f88562f21b2c8adb2422bb970f76e83d476f8c Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 23 May 2014 22:11:41 +0100 Subject: [PATCH] Make AutoConfigurationPackages.set public Open up AutoConfigurationPackages.set(...) to allow programmatic configuration of base packages. Fixes gh-924 --- .../AutoConfigurationPackages.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/AutoConfigurationPackages.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/AutoConfigurationPackages.java index c83bd8c813a..193711808c3 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/AutoConfigurationPackages.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/AutoConfigurationPackages.java @@ -16,7 +16,7 @@ package org.springframework.boot.autoconfigure; -import java.util.Collections; +import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; @@ -64,11 +64,20 @@ public abstract class AutoConfigurationPackages { } } - static void set(BeanDefinitionRegistry registry, String packageName) { + /** + * Programmatically set the auto-configuration package names. You can use this method + * to manually define the base packages that will be used for a given + * {@link BeanDefinitionRegistry}. Generally it's recommended that you don't call this + * method directly, but instead rely on the default convention where the package name + * is set from your {@code @EnableAutoConfiguration} configuration class. + * @param registry the bean definition registry + * @param packageNames the pacakge names to set + */ + public static void set(BeanDefinitionRegistry registry, String... packageNames) { GenericBeanDefinition beanDefinition = new GenericBeanDefinition(); beanDefinition.setBeanClass(BasePackages.class); beanDefinition.getConstructorArgumentValues().addIndexedArgumentValue(0, - packageName); + packageNames); beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); registry.registerBeanDefinition(BEAN, beanDefinition); } @@ -97,9 +106,14 @@ public abstract class AutoConfigurationPackages { private boolean loggedBasePackageInfo; - public BasePackages(String name) { - this.packages = (StringUtils.hasText(name) ? Collections.singletonList(name) - : Collections. emptyList()); + public BasePackages(String... names) { + List packages = new ArrayList(); + for (String name : names) { + if (StringUtils.hasText(name)) { + packages.add(name); + } + } + this.packages = packages; } public List get() {