ComponentScanAnnotationParser supports multiple base packages within a single placeholder as well

Issue: SPR-10425
This commit is contained in:
Juergen Hoeller 2014-09-25 17:51:53 +02:00
parent 1f3e195dac
commit 22c0085ba0
1 changed files with 12 additions and 11 deletions

View File

@ -18,6 +18,8 @@ package org.springframework.context.annotation;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -26,6 +28,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanNameGenerator; import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.core.io.ResourceLoader; import org.springframework.core.io.ResourceLoader;
@ -111,21 +114,19 @@ class ComponentScanAnnotationParser {
scanner.getBeanDefinitionDefaults().setLazyInit(true); scanner.getBeanDefinitionDefaults().setLazyInit(true);
} }
List<String> basePackages = new ArrayList<String>(); Set<String> basePackages = new LinkedHashSet<String>();
for (String pkg : componentScan.getStringArray("value")) { Set<String> specifiedPackages = new LinkedHashSet<String>();
if (StringUtils.hasText(pkg)) { specifiedPackages.addAll(Arrays.asList(componentScan.getStringArray("value")));
basePackages.add(pkg); specifiedPackages.addAll(Arrays.asList(componentScan.getStringArray("basePackages")));
}
} for (String pkg : specifiedPackages) {
for (String pkg : componentScan.getStringArray("basePackages")) { String[] tokenized = StringUtils.tokenizeToStringArray(this.environment.resolvePlaceholders(pkg),
if (StringUtils.hasText(pkg)) { ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
basePackages.add(pkg); basePackages.addAll(Arrays.asList(tokenized));
}
} }
for (Class<?> clazz : componentScan.getClassArray("basePackageClasses")) { for (Class<?> clazz : componentScan.getClassArray("basePackageClasses")) {
basePackages.add(ClassUtils.getPackageName(clazz)); basePackages.add(ClassUtils.getPackageName(clazz));
} }
if (basePackages.isEmpty()) { if (basePackages.isEmpty()) {
basePackages.add(ClassUtils.getPackageName(declaringClass)); basePackages.add(ClassUtils.getPackageName(declaringClass));
} }