【问题标题】:instantiate a class that contains an annotation实例化一个包含注解的类
【发布时间】:2018-06-17 04:17:43
【问题描述】:

我可以使用反射API根据注解找到一个类吗? 我正在寻找一种基于注释执行类的方法。 例如,我有一个带有验证注释的类凭据,参数“token”和“permissions”是执行责任类的操作

@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
 {
 …
 }

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

【问题讨论】:

    标签: java reflection annotations


    【解决方案1】:

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

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

    获取所有Verifys:

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

    获取所有verifiers:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      相关资源
      最近更新 更多