使用自定义注释扫描类路径以查找类

时间:2011-09-06 08:45:06

标签: java guice

例如,如果我有注释@MyOwnAnnotation并且在我的类路径中有这些类,那么我可以使用某种过滤器扫描类路径(例如。仅扫描以my.own.app.*开头的包)并获取带注释@MyOwnAnnotation的所有类的列表?我使用guice作为注入框架,我不使用Spring。

4 个答案:

答案 0 :(得分:12)

是的,请查看Scannotation库。

另外,请参阅以下博文documents use of Scannotation

基本示例:

URL[] urls = ClasspathUrlFinder.findClassPaths(); // scan java.class.path
AnnotationDB db = new AnnotationDB();
db.scanArchives(urls);
Set<String> entityClasses =
    db.getAnnotationIndex().get(MyOwnAnnotation.class.getName());

您的注释需要具有“运行时”保留,以便它们在运行时在.class文件中可用。

答案 1 :(得分:2)

你可以试试我的图书馆FastClasspathScanner

List<String> classNames = new FastClassPathScanner("my.own.app")
    .scan()
    .getNamesOfClassesWithAnnotation(MyOwnAnnotation.class);

答案 2 :(得分:1)

我实际上推荐了另一种方法,比其他方法更好(因为它们都使用类路径扫描,这很慢)。它被称为ClassIndex,它是INDEXES注释类:

https://github.com/atteo/classindex

答案 3 :(得分:0)

您可以尝试使用corn-cps 示例:

List<Class<?>> classes = CPScanner.scanClasses(new PackageNameFilter("net.sf.corn.cps.*"),new ClassFilter().appendAnnotation(SampleAnnotation.class));

将下面的依赖项放在你的pom.xml

<dependency>
    <groupId>net.sf.corn</groupId>
    <artifactId>corn-cps</artifactId>
    <version>1.0.1</version>
</dependency>