Closed
Description
Affects: 5.1.4.RELEASE
(Similar to #16681) When you override excludeFilters
in @ComponentScan
with multiple Filters
, an IllegalArgumentException
will be thrown. (It works correctly in Spring Framework 4 (>=4.0.7).) Excerpt:
@Configuration
@ComponentScan(basePackages = "a", excludeFilters = {}) // can be empty
public class Cfg1 {}
@ComponentScan(basePackages = { "a", "b" }, excludeFilters = {
@Filter(type = FilterType.REGEX, pattern = "c"),
@Filter(type = FilterType.REGEX, pattern = "d")
})
public class Cfg2 extends Cfg1 {}
The current "result":
java.lang.IllegalStateException: Failed to load ApplicationContext
...
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [...]; nested exception is java.lang.IllegalArgumentException: Attribute 'excludeFilters' is of type [Filter[]], but [AnnotationAttributes[]] was expected in attributes for annotation [org.springframework.context.annotation.ComponentScan]
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:181)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:315)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:232)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:691)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:528)
...
Caused by: java.lang.IllegalArgumentException: Attribute 'excludeFilters' is of type [Filter[]], but [AnnotationAttributes[]] was expected in attributes for annotation [org.springframework.context.annotation.ComponentScan]
at org.springframework.core.annotation.AnnotationAttributes.assertAttributeType(AnnotationAttributes.java:365)
at org.springframework.core.annotation.AnnotationAttributes.getRequiredAttribute(AnnotationAttributes.java:345)
at org.springframework.core.annotation.AnnotationAttributes.getAnnotationArray(AnnotationAttributes.java:295)
at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:101)
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:287)
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:242)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:191)
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:295)
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:242)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:199)
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:167)
...