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