AnnotationUtils.findAnnotation返回null

时间:2013-02-07 02:19:12

标签: java spring annotations

我正在尝试使用自定义注释查找所有bean,因此我可以查看每个bean上的注释属性,以获得有关预定作业的帮助。

自定义弹簧注释:

@Component
@Scope("prototype")
public @interface Importer {
    String value() default "";
    String fileRegex() default "";
}

示例类定义(MyAwesomeImporterFramework是基类 - 没有注释)

@Importer(value="spring.bean.name", fileRegex="myfile.*\\.csv")
public class MyAwesomeImporter extends MyAwesomeImporterFramework

查找带注释的Spring bean的代码:

public static List<Class<?>> findBeanClasses(String packageName, Class<? extends Annotation> annotation) throws ClassNotFoundException {
    List<Class<?>> classes = new LinkedList<Class<?>>();

    ClassPathScanningCandidateComponentProvider scanner =
            new ClassPathScanningCandidateComponentProvider(false);
    scanner.addIncludeFilter(new AnnotationTypeFilter(annotation));

    for(BeanDefinition def : scanner.findCandidateComponents(packageName)) {
        classes.add(Class.forName(def.getBeanClassName()));
    }

    return classes;
}

利用finder获取注释属性的代码。

for(Class<?> clazz : AnnotationFinder.findBeanClasses(CLASS_BASE_PACKAGE, Importer.class)) {
    // Doesn't work either:
    // Importer annotation = clazz.getAnnotation(Importer.class);
    Importer annotation = AnnotationUtils.findAnnotation(clazz, Importer.class);
    importClasses.put(annotation.fileRegex(), annotation.value());
}

此处,clazz.getAnnotation(Importer.class)AnnotationUtils.findAnnotation(clazz, Importer.class)都返回null。检查调试器中的代码会显示正确的类,但clazz上的注释映射为空。

我错过了什么?这两个方法都应该返回一些东西,但是几乎看起来注释在运行时期间已经从类中消失了吗?

0 个答案:

没有答案