From 20da79e9bde626fa4601ddc85434a3fc3f5e7fbb Mon Sep 17 00:00:00 2001 From: izeye Date: Fri, 11 Sep 2015 20:24:19 +0900 Subject: [PATCH 1/2] Use mergedPackages in ServletComponentScanRegistrar Closes gh-3943 --- .../boot/web/servlet/ServletComponentScanRegistrar.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletComponentScanRegistrar.java b/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletComponentScanRegistrar.java index cb1cae713b3..94d5d6dd827 100644 --- a/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletComponentScanRegistrar.java +++ b/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletComponentScanRegistrar.java @@ -62,7 +62,7 @@ class ServletComponentScanRegistrar implements ImportBeanDefinitionRegistrar { Set mergedPackages = new LinkedHashSet( (Set) constructorArguments.getValue()); mergedPackages.addAll(packagesToScan); - constructorArguments.setValue(packagesToScan); + constructorArguments.setValue(mergedPackages); } private void addPostProcessor(BeanDefinitionRegistry registry, From bfc0745616bfa46bffae604751ea16d6d114a2ff Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 15 Sep 2015 17:05:21 -0400 Subject: [PATCH 2/2] Add test for merging packages from multiple @ServletComponentScans --- .../servlet/ServletComponentScanRegistrar.java | 5 ++--- .../ServletComponentScanRegistrarTests.java | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletComponentScanRegistrar.java b/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletComponentScanRegistrar.java index 94d5d6dd827..b1ff89c0c33 100644 --- a/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletComponentScanRegistrar.java +++ b/spring-boot/src/main/java/org/springframework/boot/web/servlet/ServletComponentScanRegistrar.java @@ -57,10 +57,9 @@ class ServletComponentScanRegistrar implements ImportBeanDefinitionRegistrar { Set packagesToScan) { BeanDefinition definition = registry.getBeanDefinition(BEAN_NAME); ValueHolder constructorArguments = definition.getConstructorArgumentValues() - .getGenericArgumentValue(String[].class); + .getGenericArgumentValue(Set.class); @SuppressWarnings("unchecked") - Set mergedPackages = new LinkedHashSet( - (Set) constructorArguments.getValue()); + Set mergedPackages = (Set) constructorArguments.getValue(); mergedPackages.addAll(packagesToScan); constructorArguments.setValue(mergedPackages); } diff --git a/spring-boot/src/test/java/org/springframework/boot/web/servlet/ServletComponentScanRegistrarTests.java b/spring-boot/src/test/java/org/springframework/boot/web/servlet/ServletComponentScanRegistrarTests.java index 37234110575..40b04cce01e 100644 --- a/spring-boot/src/test/java/org/springframework/boot/web/servlet/ServletComponentScanRegistrarTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/web/servlet/ServletComponentScanRegistrarTests.java @@ -84,6 +84,18 @@ public class ServletComponentScanRegistrarTests { .getPackage().getName())); } + @Test + public void packagesFromMultipleAnnotationsAreMerged() { + this.context = new AnnotationConfigApplicationContext(BasePackages.class, + AdditionalPackages.class); + ServletComponentRegisteringPostProcessor postProcessor = this.context + .getBean(ServletComponentRegisteringPostProcessor.class); + assertThat( + postProcessor.getPackagesToScan(), + containsInAnyOrder("com.example.foo", "com.example.bar", + "com.example.baz")); + } + @Configuration @ServletComponentScan({ "com.example.foo", "com.example.bar" }) static class ValuePackages { @@ -96,6 +108,12 @@ public class ServletComponentScanRegistrarTests { } + @Configuration + @ServletComponentScan(basePackages = "com.example.baz") + static class AdditionalPackages { + + } + @Configuration @ServletComponentScan(basePackageClasses = ServletComponentScanRegistrarTests.class) static class BasePackageClasses {