【问题标题】:Java Annotations - Is there any helper library to read/process annotations?Java Annotations - 是否有任何帮助库来读取/处理注释?
【发布时间】:2010-04-08 04:59:39
【问题描述】:

我开始大量使用 Java 注释。一个例子是采用带有注释的方法并将它们转换为基于“telnet”的命令行命令。我通过解析注释并挂钩到 jopt 选项解析器来做到这一点。

但是,我手动执行了很多这些操作。比如Method参数注解处理..

Method method = ... //;
Class[] parameters = method.getParamterTypes();
Annotation[][] annotations = method.getparamterAnnotations();

for( int i = 0; i < parameters.length; i++ )
{
   // iterate through the annotation , see if each param has specific annotation ,etc.
}

非常冗长乏味。

是否有任何开源项目可以帮助处理注释?

【问题讨论】:

    标签: java annotations


    【解决方案1】:

    我们使用它来寻找特定的注释:

    for (Field field : clazz.getDeclaredFields()) {
        if (field.isAnnotationPresent(MyAnnotation.class)) {
            field.setAccessible(true);
            String fieldName = field.getName();
            Object fieldValue = field.get(myObj);
            field.setAccessible(false);
        }
    }
    

    【讨论】:

      【解决方案2】:

      不完全确定注释需要哪些帮助,但我建议您看看我的Annox 项目。这是API

      例如,您可以使用 Annox 将注释读入

      • XAnnotation
      • XAnnotationField
      • XPackage
      • XClass
      • XConstructor
      • XField
      • XMethod
      • XParameter

      可能更适合您需求的结构。您可以从 XML 中读取任意注释,在它们上运行访问者等等。

      【讨论】:

        【解决方案3】:

        任何项目都将包含完全相同的样板代码。你为什么不做你自己的实用程序?

        我相信你可以使用 ASM:

        【讨论】:

        • 我可以编写自己的实用程序助手。但我不想重新发明轮子。至于 ASM,我使用 CGLIB(它使用 ASM)来创建动态代理类。
        • 您可以将自己的实用程序编写为开源项目,以便我们提供帮助和重用它! :-)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-26
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 2022-01-06
        • 2010-12-01
        • 1970-01-01
        相关资源
        最近更新 更多