实例化包含注释的类

时间:2018-06-17 04:17:43

标签: java reflection annotations

我可以使用反射API根据注释查找类吗? 我正在寻找一种基于注释执行类的方法。 例如,我有一个带有Verify annotation的类凭证和参数" token"和"权限"是执行责任类的行动

@Verify ("token")
@Verify ("permissions")
class Credentials {
....
}

Verify(" token")应该调用TokenVerifier类中的execute方法,并且Verify(" permissions")应该调用PermissionsVerifier类中的execute方法。 我会在我的类中添加带有必要参数的注释@verifier,以便能够找到它。像这样:

@verifier(path="classPath", action="token")
class TokenVerifier
{
…
 }

 @verifier(path="classPath", action="permissions")
 class PermissionsVerifier
 {
 …
 }

我能以某种方式获得带有这些注释的类吗?值得一提的是,我不知道哪些类会有这些注释,这个想法是它是动态的。

1 个答案:

答案 0 :(得分:1)

标准Java不允许您查找具有给定注释的所有类,因为注释是在加载类之后评估的,而不是之前的。

但是,有些工具会扫描包含注释的类的类路径,并在发生匹配时加载类,例如: fast-classpath-scanner

获取所有Verify s:

new FastClasspathScanner("package.to.search.in")
    .matchClassesWithAnnotation(Verify.class, c -> System.out.println(c.getName()))
    .scan();

获取所有verifier s:

new FastClasspathScanner("package.to.search.in")
    .matchClassesWithAnnotation(verifier.class, c -> System.out.println(c.getName()))
    .scan();

加载类后,您可以根据需要使用标准反射来评估和匹配类。