java - 向 Java 类添加编程注释

标签 java compiler-construction annotations bytecode-manipulation

使用示例:
我想在类字段上放置一个自定义注释 @MyContainer,然后在所有此类字段上自动添加相关的 Hibernate 注释(取决于字段类型和属性)。
此外,我需要向类添加 JAXB XmlType 注释,并将类型名称基于类名称。
我还想根据他们的类型等向字段添加注释。 所有添加的注释都应该在运行时可用(这样 hibernate/JAXB 可以找到它们)。
我知道以下选项:

  1. 预处理类源码(错误选项)
  2. 在编译期间使用 javax.annotation.processing API 进行处理
  3. 使用 Java Assist 等工具进行编译后操作
  4. 使用 java.lang.instrument API 加载类期间的操作
  5. 用 AspectJ 做(不够强大)

我的主要目标是:

  1. 保持类和源代码同步以进行调试
  2. 支持 Maven 和 IDE (Eclipse/Intellij) 工作

如果已经做过此类事情的人可以推荐完成此类任务的最佳方法(可能还有潜在的陷阱),我将不胜感激。

最佳答案

这是定义自定义注释的代码示例。此 @TesterInfo 应用于类级别,存储测试人员详细信息。这显示了返回类型的不同用法——枚举、数组和字符串。

package com.mkyong.test.core;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE) //on class level
public @interface TesterInfo {

    public enum Priority {
       LOW, MEDIUM, HIGH
    }

    Priority priority() default Priority.MEDIUM;

    String[] tags() default "";

    String createdBy() default "Mkyong";

    String lastModified() default "03/01/2014";

}

关于java - 向 Java 类添加编程注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11598333/

相关文章:

Java 7 随机类

java - 为什么Spring-web没有在其POM中添加javax.javaee-api?

java - 有没有机器独立的编译器?

java - 使用 Java Compiler API,创建了哪些类?

spring - 在 hibernate/spring 中的多个模式之间分区数据

java - 如何在多个变量上应用单个注释?

java - 这条语句的返回值是多少

java - 查找两个数组中时间窗口的最大数量。起始数组和结束数组

java - 构建期间预验证类 java 时出错 (BlackBerry)

java - 通过注解在hibernate中定义集合