使用自定义注释扫描类路径中的类
例如,如果我有注释@MyOwnAnnotation
并在我的类路径中包含这些类,那么我可以使用某种filter扫描类路径(例如。仅扫描以my.own.app.*
开头的包)并获取所有类的列表注释@MyOwnAnnotation
? 我使用guice作为注入框架,我不使用Spring。
是的,请查看Scannotation库。
另外,请参阅以下博客文章,该文档使用了Scannotation 。
基本示例:
URL[] urls = ClasspathUrlFinder.findClassPaths(); // scan java.class.path AnnotationDB db = new AnnotationDB(); db.scanArchives(urls); Set entityClasses = db.getAnnotationIndex().get(MyOwnAnnotation.class.getName());
您的注释需要具有“运行时”保留,以便它们在运行时在.class
文件中可用。
您可以尝试我的库FastClasspathScanner :
List classNames = new FastClassPathScanner("my.own.app") .scan() .getNamesOfClassesWithAnnotation(MyOwnAnnotation.class);
我实际上推荐了另一种方法,比其他方法更好(因为它们都使用类路径扫描,这很慢)。 它被称为ClassIndex,它是INDEXES注释类:
你可以试试corn-cps
例:
List> classes = CPScanner.scanClasses(new PackageNameFilter("net.sf.corn.cps.*"),new ClassFilter().appendAnnotation(SampleAnnotation.class));
将下面的dependecy放在你的pom.xml中
net.sf.corn corn-cps 1.0.1