ComponentScanAnnotationParser supports multiple base packages within a single placeholder as well
Issue: SPR-10425
This commit is contained in:
parent
1f3e195dac
commit
22c0085ba0
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue