Search in sources :

Example 6 with TypeFilter

use of org.springframework.core.type.filter.TypeFilter in project spring-framework by spring-projects.

the class ComponentScanAnnotationParser method typeFiltersFor.

private List<TypeFilter> typeFiltersFor(AnnotationAttributes filterAttributes) {
    List<TypeFilter> typeFilters = new ArrayList<>();
    FilterType filterType = filterAttributes.getEnum("type");
    for (Class<?> filterClass : filterAttributes.getClassArray("classes")) {
        switch(filterType) {
            case ANNOTATION:
                Assert.isAssignable(Annotation.class, filterClass, "@ComponentScan ANNOTATION type filter requires an annotation type");
                @SuppressWarnings("unchecked") Class<Annotation> annotationType = (Class<Annotation>) filterClass;
                typeFilters.add(new AnnotationTypeFilter(annotationType));
                break;
            case ASSIGNABLE_TYPE:
                typeFilters.add(new AssignableTypeFilter(filterClass));
                break;
            case CUSTOM:
                Assert.isAssignable(TypeFilter.class, filterClass, "@ComponentScan CUSTOM type filter requires a TypeFilter implementation");
                TypeFilter filter = BeanUtils.instantiateClass(filterClass, TypeFilter.class);
                ParserStrategyUtils.invokeAwareMethods(filter, this.environment, this.resourceLoader, this.registry);
                typeFilters.add(filter);
                break;
            default:
                throw new IllegalArgumentException("Filter type not supported with Class value: " + filterType);
        }
    }
    for (String expression : filterAttributes.getStringArray("pattern")) {
        switch(filterType) {
            case ASPECTJ:
                typeFilters.add(new AspectJTypeFilter(expression, this.resourceLoader.getClassLoader()));
                break;
            case REGEX:
                typeFilters.add(new RegexPatternTypeFilter(Pattern.compile(expression)));
                break;
            default:
                throw new IllegalArgumentException("Filter type not supported with String pattern: " + filterType);
        }
    }
    return typeFilters;
}
Also used : AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter) AspectJTypeFilter(org.springframework.core.type.filter.AspectJTypeFilter) ArrayList(java.util.ArrayList) TypeFilter(org.springframework.core.type.filter.TypeFilter) RegexPatternTypeFilter(org.springframework.core.type.filter.RegexPatternTypeFilter) AspectJTypeFilter(org.springframework.core.type.filter.AspectJTypeFilter) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter) AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter) RegexPatternTypeFilter(org.springframework.core.type.filter.RegexPatternTypeFilter) Annotation(java.lang.annotation.Annotation) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter)

Aggregations

TypeFilter (org.springframework.core.type.filter.TypeFilter)6 AnnotationTypeFilter (org.springframework.core.type.filter.AnnotationTypeFilter)5 AssignableTypeFilter (org.springframework.core.type.filter.AssignableTypeFilter)5 AspectJTypeFilter (org.springframework.core.type.filter.AspectJTypeFilter)4 RegexPatternTypeFilter (org.springframework.core.type.filter.RegexPatternTypeFilter)4 Annotation (java.lang.annotation.Annotation)2 LinkedHashSet (java.util.LinkedHashSet)2 FatalBeanException (org.springframework.beans.FatalBeanException)2 GrailsPluginManager (grails.plugins.GrailsPluginManager)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 BeanDefinitionStoreException (org.springframework.beans.factory.BeanDefinitionStoreException)1 BeanFactory (org.springframework.beans.factory.BeanFactory)1 HierarchicalBeanFactory (org.springframework.beans.factory.HierarchicalBeanFactory)1 AnnotatedBeanDefinition (org.springframework.beans.factory.annotation.AnnotatedBeanDefinition)1 AnnotatedGenericBeanDefinition (org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition)1 BeanDefinition (org.springframework.beans.factory.config.BeanDefinition)1 BeanDefinitionRegistry (org.springframework.beans.factory.support.BeanDefinitionRegistry)1 BeanNameGenerator (org.springframework.beans.factory.support.BeanNameGenerator)1