有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在运行时处理注释?

我正在构建一个数据模型,我需要定义一个像@UNIQUE这样的注释,所以无论何时填充模型,它都会首先运行一个代码来检查数据库,看它是否唯一。我的数据库不是关系型的,也不支持唯一索引,所以在数据库中这样做是不可能的。 我需要知道的是,有没有一种方法可以编写注释逻辑,在运行时检查这个约束

范例

public class model{
    @Unique
    public CustomKey key;
}

现在我想,当模型被填充并看到这个独特的注释时,它会自动首先调用下面的代码,然后再继续: (以下是sudo代码而不是实际的java代码)

public void checkUnique(){
    if(annotation instanceof MyAnnotation){
        Unique myAnnotation = (Unique) annotation;
        checkifIsUnquie(myAnnotation.getVariableValue());
    }

共 (1) 个答案

  1. # 1 楼答案

    关于反射

    检查此项目:https://code.google.com/p/reflections/

    将其包含在项目中,并使用下面的代码块获取由注释注释注释的所有字段的列表:

    Reflections reflections = new Reflections("my.project.prefix");
    
    Set<Field> annotated = 
               reflections.getFieldsAnnotatedWith(SomeAnnotation.class);
    

    还请注意,您需要声明注释类,即@Unique以保留到运行时,否则javac将删除您注释的任何字段上的注释信息。以下是你如何做到这一点:

    @Retention(RUNTIME)
    public @interface Unique { }
    

    但要做到这一点,实际上需要AOP(面向方面编程)

    因为在Java中,不能仅使用注释来拦截代码流。在纯Java中,注释只是一段与类、字段等相关的信息,您可以在编译时、运行时和。。。你必须自己定义逻辑来处理它们。将AspectJ作为一个Java AOP库/运行时进行检查,它可以让你做你想做的事情