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 楼答案
关于反射
检查此项目:https://code.google.com/p/reflections/
将其包含在项目中,并使用下面的代码块获取由注释注释注释的所有字段的列表:
还请注意,您需要声明注释类,即@Unique以保留到运行时,否则javac将删除您注释的任何字段上的注释信息。以下是你如何做到这一点:
但要做到这一点,实际上需要AOP(面向方面编程)
因为在Java中,不能仅使用注释来拦截代码流。在纯Java中,注释只是一段与类、字段等相关的信息,您可以在编译时、运行时和。。。你必须自己定义逻辑来处理它们。将AspectJ作为一个Java AOP库/运行时进行检查,它可以让你做你想做的事情