Search in sources :

Example 1 with AnnotationTypeFilter

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

the class AnnotationTypeFilterTests method testInheritedAnnotationFromInterfaceDoesNotMatch.

@Test
public void testInheritedAnnotationFromInterfaceDoesNotMatch() throws Exception {
    MetadataReaderFactory metadataReaderFactory = new SimpleMetadataReaderFactory();
    String classUnderTest = "org.springframework.core.type.AnnotationTypeFilterTests$SomeSubClassOfSomeComponentInterface";
    MetadataReader metadataReader = metadataReaderFactory.getMetadataReader(classUnderTest);
    AnnotationTypeFilter filter = new AnnotationTypeFilter(InheritedAnnotation.class);
    // Must fail as annotation on interfaces should not be considered a match
    assertFalse(filter.match(metadataReader, metadataReaderFactory));
    ClassloadingAssertions.assertClassNotLoaded(classUnderTest);
}
Also used : AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter) MetadataReaderFactory(org.springframework.core.type.classreading.MetadataReaderFactory) SimpleMetadataReaderFactory(org.springframework.core.type.classreading.SimpleMetadataReaderFactory) SimpleMetadataReaderFactory(org.springframework.core.type.classreading.SimpleMetadataReaderFactory) MetadataReader(org.springframework.core.type.classreading.MetadataReader) Test(org.junit.Test)

Example 2 with AnnotationTypeFilter

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

the class AnnotationTypeFilterTests method testInheritedAnnotationFromBaseClassDoesMatch.

@Test
public void testInheritedAnnotationFromBaseClassDoesMatch() throws Exception {
    MetadataReaderFactory metadataReaderFactory = new SimpleMetadataReaderFactory();
    String classUnderTest = "org.springframework.core.type.AnnotationTypeFilterTests$SomeSubClassOfSomeComponent";
    MetadataReader metadataReader = metadataReaderFactory.getMetadataReader(classUnderTest);
    AnnotationTypeFilter filter = new AnnotationTypeFilter(InheritedAnnotation.class);
    assertTrue(filter.match(metadataReader, metadataReaderFactory));
    ClassloadingAssertions.assertClassNotLoaded(classUnderTest);
}
Also used : AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter) MetadataReaderFactory(org.springframework.core.type.classreading.MetadataReaderFactory) SimpleMetadataReaderFactory(org.springframework.core.type.classreading.SimpleMetadataReaderFactory) SimpleMetadataReaderFactory(org.springframework.core.type.classreading.SimpleMetadataReaderFactory) MetadataReader(org.springframework.core.type.classreading.MetadataReader) Test(org.junit.Test)

Example 3 with AnnotationTypeFilter

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

the class AnnotationTypeFilterTests method testNonAnnotatedClassDoesntMatch.

@Test
public void testNonAnnotatedClassDoesntMatch() throws Exception {
    MetadataReaderFactory metadataReaderFactory = new SimpleMetadataReaderFactory();
    String classUnderTest = "org.springframework.core.type.AnnotationTypeFilterTests$SomeNonCandidateClass";
    MetadataReader metadataReader = metadataReaderFactory.getMetadataReader(classUnderTest);
    AnnotationTypeFilter filter = new AnnotationTypeFilter(Component.class);
    assertFalse(filter.match(metadataReader, metadataReaderFactory));
    ClassloadingAssertions.assertClassNotLoaded(classUnderTest);
}
Also used : AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter) MetadataReaderFactory(org.springframework.core.type.classreading.MetadataReaderFactory) SimpleMetadataReaderFactory(org.springframework.core.type.classreading.SimpleMetadataReaderFactory) SimpleMetadataReaderFactory(org.springframework.core.type.classreading.SimpleMetadataReaderFactory) MetadataReader(org.springframework.core.type.classreading.MetadataReader) Test(org.junit.Test)

Example 4 with AnnotationTypeFilter

use of org.springframework.core.type.filter.AnnotationTypeFilter in project opennms by OpenNMS.

the class JaxbUtils method getClassForElement.

public static Class<?> getClassForElement(final String elementName) {
    if (elementName == null)
        return null;
    final Class<?> existing = m_elementClasses.get(elementName);
    if (existing != null)
        return existing;
    final ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
    scanner.addIncludeFilter(new AnnotationTypeFilter(XmlRootElement.class));
    for (final BeanDefinition bd : scanner.findCandidateComponents("org.opennms")) {
        final String className = bd.getBeanClassName();
        try {
            final Class<?> clazz = Class.forName(className);
            final XmlRootElement annotation = clazz.getAnnotation(XmlRootElement.class);
            if (annotation == null) {
                LOG.warn("Somehow found class {} but it has no @XmlRootElement annotation! Skipping.", className);
                continue;
            }
            if (elementName.equalsIgnoreCase(annotation.name())) {
                LOG.trace("Found class {} for element name {}", className, elementName);
                m_elementClasses.put(elementName, clazz);
                return clazz;
            }
        } catch (final ClassNotFoundException e) {
            LOG.warn("Unable to get class object from class name {}. Skipping.", className, e);
        }
    }
    return null;
}
Also used : AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter) XmlRootElement(javax.xml.bind.annotation.XmlRootElement) ClassPathScanningCandidateComponentProvider(org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider) BeanDefinition(org.springframework.beans.factory.config.BeanDefinition)

Example 5 with AnnotationTypeFilter

use of org.springframework.core.type.filter.AnnotationTypeFilter in project dubbo by alibaba.

the class ServiceAnnotationBeanPostProcessor method registerServiceBeans.

/**
 * Registers Beans whose classes was annotated {@link Service}
 *
 * @param packagesToScan The base packages to scan
 * @param registry       {@link BeanDefinitionRegistry}
 */
private void registerServiceBeans(Set<String> packagesToScan, BeanDefinitionRegistry registry) {
    DubboClassPathBeanDefinitionScanner scanner = new DubboClassPathBeanDefinitionScanner(registry, environment, resourceLoader);
    BeanNameGenerator beanNameGenerator = resolveBeanNameGenerator(registry);
    scanner.setBeanNameGenerator(beanNameGenerator);
    scanner.addIncludeFilter(new AnnotationTypeFilter(Service.class));
    for (String packageToScan : packagesToScan) {
        // Registers @Service Bean first
        scanner.scan(packageToScan);
        // Finds all BeanDefinitionHolders of @Service whether @ComponentScan scans or not.
        Set<BeanDefinitionHolder> beanDefinitionHolders = findServiceBeanDefinitionHolders(scanner, packageToScan, registry, beanNameGenerator);
        if (!CollectionUtils.isEmpty(beanDefinitionHolders)) {
            for (BeanDefinitionHolder beanDefinitionHolder : beanDefinitionHolders) {
                registerServiceBean(beanDefinitionHolder, registry, scanner);
            }
            if (logger.isInfoEnabled()) {
                logger.info(beanDefinitionHolders.size() + " annotated Dubbo's @Service Components { " + beanDefinitionHolders + " } were scanned under package[" + packageToScan + "]");
            }
        } else {
            if (logger.isWarnEnabled()) {
                logger.warn("No Spring Bean annotating Dubbo's @Service was found under package[" + packageToScan + "]");
            }
        }
    }
}
Also used : AnnotationBeanNameGenerator(org.springframework.context.annotation.AnnotationBeanNameGenerator) BeanNameGenerator(org.springframework.beans.factory.support.BeanNameGenerator) AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter) BeanDefinitionHolder(org.springframework.beans.factory.config.BeanDefinitionHolder) Service(com.alibaba.dubbo.config.annotation.Service) DubboClassPathBeanDefinitionScanner(com.alibaba.dubbo.config.spring.context.annotation.DubboClassPathBeanDefinitionScanner)

Aggregations

AnnotationTypeFilter (org.springframework.core.type.filter.AnnotationTypeFilter)66 BeanDefinition (org.springframework.beans.factory.config.BeanDefinition)29 ClassPathScanningCandidateComponentProvider (org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider)25 Test (org.junit.jupiter.api.Test)18 MetadataReader (org.springframework.core.type.classreading.MetadataReader)14 MetadataReaderFactory (org.springframework.core.type.classreading.MetadataReaderFactory)13 SimpleMetadataReaderFactory (org.springframework.core.type.classreading.SimpleMetadataReaderFactory)12 AssignableTypeFilter (org.springframework.core.type.filter.AssignableTypeFilter)10 Component (org.springframework.stereotype.Component)10 HashSet (java.util.HashSet)9 DevComponent (example.profilescan.DevComponent)8 ProfileAnnotatedComponent (example.profilescan.ProfileAnnotatedComponent)8 ProfileMetaAnnotatedComponent (example.profilescan.ProfileMetaAnnotatedComponent)8 DefaultNamedComponent (example.scannable.DefaultNamedComponent)8 NamedComponent (example.scannable.NamedComponent)8 ArrayList (java.util.ArrayList)7 TypeFilter (org.springframework.core.type.filter.TypeFilter)7 AnnotatedComponent (example.gh24375.AnnotatedComponent)6 BarComponent (example.scannable.sub.BarComponent)6 Test (org.junit.Test)6