使用自定义注释扫描类路径中的类

例如,如果我有注释@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注释类:

https://github.com/atteo/classindex

你可以试试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