我可以使用反射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
{
…
}
我能以某种方式获得带有这些注释的类吗?值得一提的是,我不知道哪些类会有这些注释,这个想法是它是动态的。
答案 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();
加载类后,您可以根据需要使用标准反射来评估和匹配类。