【问题标题】:Get the class on which the annotation is applied获取应用注解的类
【发布时间】:2014-09-20 12:59:28
【问题描述】:

我正在构建一个自定义注释,其中有一个 Class 类型的字段。使用注释时如何在其中设置值? 代码如下:

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface SpringCache {
        String putIt();
        String getIt();
        Class c();
    }

这是我的自定义注释。现在,当我使用它时,如何将类赋予变量“c”?

    @SpringCache(putIt="I'm put", getIt="I'm get", c=<??>)
    public class TestSpringCache {
        public static void main(String[] args) {
                System.out.println();
        }
    }

在这种情况下,我想要 c=TestSpringCache.class。

【问题讨论】:

  • 你试过c=TestSpringCache.class吗?
  • 您尝试做的事情毫无意义。要获取注解,您必须先获取对类的引用getClass().getAnnotation(...),因此您不需要存储当前类,因为您将在注解发现过程中选择该类。
  • 但是如果我想获得使用@myCustomAnnotation 作为注释的类...?

标签: java spring model-view-controller web annotations


【解决方案1】:

实际上我没有找到解决方案。正如许多人所说,这似乎是不可能的。虽然我找到了解决这个问题的方法。

我删除了类类型,只保留了 String 和 Boolean 类型变量,为了获得带注释的类,我采用了从用户到包含具有已定义注释的类的包的路径。然后对于包中的每个类,我检查了注释。如果存在注释,我会做我想做的事,否则什么也不做。

感谢大家抽出宝贵的时间。

【讨论】:

    【解决方案2】:

    您必须从ApplicationContext(您可以注入它)、ctx.getBean() 中选择所有类实例。在那里您可以检查是否存在注释。

    【讨论】:

      【解决方案3】:

      你只需要写你想要的类:

      @SpringCache(putIt="I'm put", getIt="I'm get", c=TestSpringCache.class)
      public class TestSpringCache {
          public static void main(String[] args) {
                  System.out.println();
          }
      }
      

      如果不在同一个包中,您可能需要添加导入语句。

      【讨论】:

      • +1 Java 没有“当前类”或“我正在注释的类”的快捷方式。
      • 那么没有办法获取当前注解的类吗??
      • @Jack 感谢您花费时间和精力来回答,但这不是我想要的......
      • @HVT7 那么您真正在寻找什么?这似乎是不可能的。
      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多