Search in sources :

Example 11 with TypeFilter

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

the class TypeFilterParserUnitTests method parsesExcludesCorrectly.

@Test
public void parsesExcludesCorrectly() throws Exception {
    Element element = DomUtils.getChildElementByTagName(documentElement, "secondSample");
    Iterable<TypeFilter> filters = parser.parseTypeFilters(element, Type.EXCLUDE);
    assertThat(filters).hasAtLeastOneElementOfType(AssignableTypeFilter.class);
}
Also used : Element(org.w3c.dom.Element) TypeFilter(org.springframework.core.type.filter.TypeFilter) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter) Test(org.junit.Test)

Example 12 with TypeFilter

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

the class TypeFilterParserUnitTests method parsesIncludesCorrectly.

@Test
public void parsesIncludesCorrectly() throws Exception {
    Element element = DomUtils.getChildElementByTagName(documentElement, "firstSample");
    Iterable<TypeFilter> filters = parser.parseTypeFilters(element, Type.INCLUDE);
    assertThat(filters).hasAtLeastOneElementOfType(AssignableTypeFilter.class);
}
Also used : Element(org.w3c.dom.Element) TypeFilter(org.springframework.core.type.filter.TypeFilter) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter) Test(org.junit.Test)

Example 13 with TypeFilter

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

the class FragmentMetadata method getExclusions.

/**
 * Returns the exclusions to be used when scanning for fragment implementations.
 *
 * @return
 */
public List<TypeFilter> getExclusions() {
    Stream<TypeFilter> configurationExcludes = configuration.getExcludeFilters().stream();
    Stream<AnnotationTypeFilter> noRepositoryBeans = Stream.of(new AnnotationTypeFilter(NoRepositoryBean.class));
    return Stream.concat(configurationExcludes, noRepositoryBeans).collect(StreamUtils.toUnmodifiableList());
}
Also used : AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter) NoRepositoryBean(org.springframework.data.repository.NoRepositoryBean) TypeFilter(org.springframework.core.type.filter.TypeFilter) AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter)

Example 14 with TypeFilter

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

the class CustomRepositoryImplementationDetector method findCandidateBeanDefinitions.

Set<BeanDefinition> findCandidateBeanDefinitions(String className, Iterable<String> basePackages, Iterable<TypeFilter> excludeFilters) {
    // Build pattern to lookup implementation class
    Pattern pattern = Pattern.compile(".*\\." + className);
    // Build classpath scanner and lookup bean definition
    ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false, environment);
    provider.setResourceLoader(resourceLoader);
    provider.setResourcePattern(String.format(CUSTOM_IMPLEMENTATION_RESOURCE_PATTERN, className));
    provider.setMetadataReaderFactory(metadataReaderFactory);
    provider.addIncludeFilter(new RegexPatternTypeFilter(pattern));
    excludeFilters.forEach(it -> provider.addExcludeFilter(it));
    return // 
    Streamable.of(basePackages).stream().flatMap(// 
    it -> provider.findCandidateComponents(it).stream()).collect(Collectors.toSet());
}
Also used : ResourceLoader(org.springframework.core.io.ResourceLoader) TypeFilter(org.springframework.core.type.filter.TypeFilter) NonNull(lombok.NonNull) Collection(java.util.Collection) ClassPathScanningCandidateComponentProvider(org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider) RegexPatternTypeFilter(org.springframework.core.type.filter.RegexPatternTypeFilter) RequiredArgsConstructor(lombok.RequiredArgsConstructor) Set(java.util.Set) AbstractBeanDefinition(org.springframework.beans.factory.support.AbstractBeanDefinition) Function(java.util.function.Function) Collectors(java.util.stream.Collectors) MetadataReaderFactory(org.springframework.core.type.classreading.MetadataReaderFactory) Environment(org.springframework.core.env.Environment) Streamable(org.springframework.data.util.Streamable) Optional(java.util.Optional) BeanDefinition(org.springframework.beans.factory.config.BeanDefinition) Pattern(java.util.regex.Pattern) Nullable(javax.annotation.Nullable) Assert(org.springframework.util.Assert) Pattern(java.util.regex.Pattern) ClassPathScanningCandidateComponentProvider(org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider) RegexPatternTypeFilter(org.springframework.core.type.filter.RegexPatternTypeFilter)

Example 15 with TypeFilter

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

the class RepositoryComponentProvider method addIncludeFilter.

/**
 * Custom extension of {@link #addIncludeFilter(TypeFilter)} to extend the added {@link TypeFilter}. For the
 * {@link TypeFilter} handed we'll have two filters registered: one additionally enforcing the
 * {@link RepositoryDefinition} annotation, the other one forcing the extension of {@link Repository}.
 *
 * @see ClassPathScanningCandidateComponentProvider#addIncludeFilter(TypeFilter)
 */
@Override
public void addIncludeFilter(TypeFilter includeFilter) {
    List<TypeFilter> filterPlusInterface = new ArrayList<>(2);
    filterPlusInterface.add(includeFilter);
    filterPlusInterface.add(new InterfaceTypeFilter(Repository.class));
    super.addIncludeFilter(new AllTypeFilter(filterPlusInterface));
    List<TypeFilter> filterPlusAnnotation = new ArrayList<>(2);
    filterPlusAnnotation.add(includeFilter);
    filterPlusAnnotation.add(new AnnotationTypeFilter(RepositoryDefinition.class, true, true));
    super.addIncludeFilter(new AllTypeFilter(filterPlusAnnotation));
}
Also used : RepositoryDefinition(org.springframework.data.repository.RepositoryDefinition) AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter) Repository(org.springframework.data.repository.Repository) ArrayList(java.util.ArrayList) TypeFilter(org.springframework.core.type.filter.TypeFilter) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter) AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter)

Aggregations

TypeFilter (org.springframework.core.type.filter.TypeFilter)18 AnnotationTypeFilter (org.springframework.core.type.filter.AnnotationTypeFilter)12 AssignableTypeFilter (org.springframework.core.type.filter.AssignableTypeFilter)12 RegexPatternTypeFilter (org.springframework.core.type.filter.RegexPatternTypeFilter)8 AspectJTypeFilter (org.springframework.core.type.filter.AspectJTypeFilter)7 Annotation (java.lang.annotation.Annotation)5 HashSet (java.util.HashSet)5 BeanDefinition (org.springframework.beans.factory.config.BeanDefinition)5 IOException (java.io.IOException)4 ArrayList (java.util.ArrayList)4 MetadataReader (org.springframework.core.type.classreading.MetadataReader)4 Element (org.w3c.dom.Element)4 LinkedHashSet (java.util.LinkedHashSet)3 Test (org.junit.Test)3 AnnotatedBeanDefinition (org.springframework.beans.factory.annotation.AnnotatedBeanDefinition)3 BeanDefinitionStoreException (org.springframework.beans.factory.BeanDefinitionStoreException)2 BeanDefinitionRegistry (org.springframework.beans.factory.support.BeanDefinitionRegistry)2 BeanNameGenerator (org.springframework.beans.factory.support.BeanNameGenerator)2 ClassPathBeanDefinitionScanner (org.springframework.context.annotation.ClassPathBeanDefinitionScanner)2 ClassPathScanningCandidateComponentProvider (org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider)2