Search in sources :

Example 1 with FilterType

use of org.springframework.context.annotation.FilterType in project spring-data-commons by spring-projects.

the class AnnotationRepositoryConfigurationSource method typeFiltersFor.

/**
 * Copy of {@code ComponentScanAnnotationParser#typeFiltersFor}.
 *
 * @param filterAttributes
 * @return
 */
private List<TypeFilter> typeFiltersFor(AnnotationAttributes filterAttributes) {
    List<TypeFilter> typeFilters = new ArrayList<>();
    FilterType filterType = filterAttributes.getEnum("type");
    for (Class<?> filterClass : filterAttributes.getClassArray("value")) {
        switch(filterType) {
            case ANNOTATION:
                Assert.isAssignable(Annotation.class, filterClass, "An error occured when processing a @ComponentScan " + "ANNOTATION type filter: ");
                @SuppressWarnings("unchecked") Class<Annotation> annoClass = (Class<Annotation>) filterClass;
                typeFilters.add(new AnnotationTypeFilter(annoClass));
                break;
            case ASSIGNABLE_TYPE:
                typeFilters.add(new AssignableTypeFilter(filterClass));
                break;
            case CUSTOM:
                Assert.isAssignable(TypeFilter.class, filterClass, "An error occured when processing a @ComponentScan " + "CUSTOM type filter: ");
                typeFilters.add(BeanUtils.instantiateClass(filterClass, TypeFilter.class));
                break;
            default:
                throw new IllegalArgumentException("Unknown filter type " + filterType);
        }
    }
    for (String expression : getPatterns(filterAttributes)) {
        String rawName = filterType.toString();
        if ("REGEX".equals(rawName)) {
            typeFilters.add(new RegexPatternTypeFilter(Pattern.compile(expression)));
        } else if ("ASPECTJ".equals(rawName)) {
            typeFilters.add(new AspectJTypeFilter(expression, this.resourceLoader.getClassLoader()));
        } else {
            throw new IllegalArgumentException("Unknown filter type " + 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) AspectJTypeFilter(org.springframework.core.type.filter.AspectJTypeFilter) AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter) RegexPatternTypeFilter(org.springframework.core.type.filter.RegexPatternTypeFilter) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter) RegexPatternTypeFilter(org.springframework.core.type.filter.RegexPatternTypeFilter) Annotation(java.lang.annotation.Annotation) FilterType(org.springframework.context.annotation.FilterType) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter)

Example 2 with FilterType

use of org.springframework.context.annotation.FilterType in project spring-integration by spring-projects.

the class IntegrationComponentScanRegistrar method typeFiltersFor.

private List<TypeFilter> typeFiltersFor(AnnotationAttributes filter, BeanDefinitionRegistry registry) {
    List<TypeFilter> typeFilters = new ArrayList<>();
    FilterType filterType = filter.getEnum("type");
    for (Class<?> filterClass : filter.getClassArray("classes")) {
        switch(filterType) {
            case ANNOTATION:
                Assert.isAssignable(Annotation.class, filterClass, "An error occurred while processing a @IntegrationComponentScan ANNOTATION type filter: ");
                @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, "An error occurred while processing a @IntegrationComponentScan CUSTOM type filter: ");
                TypeFilter typeFilter = BeanUtils.instantiateClass(filterClass, TypeFilter.class);
                invokeAwareMethods(filter, this.environment, this.resourceLoader, registry);
                typeFilters.add(typeFilter);
                break;
            default:
                throw new IllegalArgumentException("Filter type not supported with Class value: " + filterType);
        }
    }
    for (String expression : filter.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) AspectJTypeFilter(org.springframework.core.type.filter.AspectJTypeFilter) AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter) RegexPatternTypeFilter(org.springframework.core.type.filter.RegexPatternTypeFilter) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter) RegexPatternTypeFilter(org.springframework.core.type.filter.RegexPatternTypeFilter) Annotation(java.lang.annotation.Annotation) FilterType(org.springframework.context.annotation.FilterType) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter)

Aggregations

Annotation (java.lang.annotation.Annotation)2 ArrayList (java.util.ArrayList)2 FilterType (org.springframework.context.annotation.FilterType)2 AnnotationTypeFilter (org.springframework.core.type.filter.AnnotationTypeFilter)2 AspectJTypeFilter (org.springframework.core.type.filter.AspectJTypeFilter)2 AssignableTypeFilter (org.springframework.core.type.filter.AssignableTypeFilter)2 RegexPatternTypeFilter (org.springframework.core.type.filter.RegexPatternTypeFilter)2 TypeFilter (org.springframework.core.type.filter.TypeFilter)2