@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Undeletable {
String status() default "status";
}
原本怪Sun怎么这么抠门,用@interface 而不另外搞一个关键字,原来Sun的意思就是把Interface和Annotation的定位一样呀。
@Target 定义Annotation 可用在什么地方,比如类型,函数,函数参数等。Type代表Class,Interface...
@Retention(RetentionPolicy.RUNTIME)表明是个运行期的annotation,否则后面的代码就不会起作用了。
String status() 定义了annotation有个status的属性,而且可以定义默认值为 "status"。
Annotation在Entity使用:
@Undeletable
public class Book{
private String status;
public void setStatus(String status) {
this.status = status;
}
}
@Undeletable(status = "status2")
public class BookWithNewStatus {
private String status2;
public void setStatus2(String status2) {
this.status2 = status2;
}
}
在框架中的判断:
if (entityClass.isAnnotationPresent(Undeletable.class)) {
Undeletable anno = (Undeletable) entityClass.getAnnotation(Undeletable.class);
statusProperty = anno.status();
}