注解本身是一种元数据,也就是描述数据的数据。
注解本身不具有任何业务逻辑,有点类似于一种特殊的注释,可以当成是一种标记。
注解本身主要是提供了一些特殊的标记,具体业务则是由反射实现的。
有了解Python的,应该会知道Python里的装饰器,和java的注解是比较类似的,但Python里面是采用闭包的方式实现的。
使用@interface简单定义一个注解:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnno {
String value() default "";
}
在测试类中使用反射获取到注解中的值:
public class MyAnnoTest {
@MyAnno("log")
public void annoTest() {
System.out.println("this is a annotation test");
}
public static void main(String[] args) {
MyAnnoTest t = new MyAnnoTest();
Class<? extends MyAnnoTest> clazz = t.getClass();
Method[] declaredMethods = clazz.getDeclaredMethods();
for (Method declaredMethod : declaredMethods) {
if (declaredMethod.isAnnotationPresent(MyAnno.class)) {
MyAnno myAnno = declaredMethod.getAnnotation(MyAnno.class);
String anno_value = myAnno.value();
System.out.println("MyAnno: " + anno_value);
}
}
t.annoTest();
}
}
这里只是简单的获取了一下注解的内容进行了打印。对java注解的实现做了初步的了解。真正的使用远不止这么简单。