注释(annotation)是jdk5.0版本增加的重要新功能之一,目前在实际开发项目中以被广泛使用,主流框架如spring、hibernate也都在保留原来xml配置方式的基础上提供了注释(annotation)方式。本文介绍了如何自己开发一个自定义的注释(annotation)。
一.定义一个注释
每个注释都必须通过一个注释接口(@interface)进行定义。例如下面代码,定义了一个Hello注释:
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Hello
{
String name() default "World";
}
@Target、@Retention是元注释。元注释是用来注释“注释”的。@Target应用于一个注释,以限制该注释可以应用到哪些条目上。它的取值是枚举类型,可以是包、类、方法、属性、构造器等8种类型。@Retention用于指定注释保留的时间,分为SOURCE、CLASS、RUNTIME。其中RUNTIME表示:该注释由虚拟机载入,可通过反射获得。其它两种在一般项目开发中很少用到,不做重点介绍。
二.使用注释
以上面例子来说,应用代码为
public class TestBean()
{
@Hello(name="csdn")
public void someMethod()
{
........
}
}
如果没有指定元素,要么是因为注释中没有任何元素,要么是因为所有元素都使用默认值。那么@Hello与@Hello(name="csdn")是一样的。这样的注释又称为标记注释。另外,如果一个具有特殊的名字value,并且没有指定其它元素,那么可以采用“单值注释”写法:@Hello("csdn") 。
三.解析注释
定义了注释(annotation)后要怎样使用它呢?需要写一个解析程序。
public class Parser {public void parse(Object obj)
{
Class cl=obj.getClass();
for(Method m : cl.getDeclaredMethods())
{
if(m.isAnnotationPresent(Hello.class))
{
Hello hello = m.getAnnotation(Hello.class);
System.out.println(hello.name());
try {
System.out.println(hello.name()+" before ...");
m.invoke(obj, null);
System.out.println(hello.name()+" after ...");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
以下调用代码:
TestBean t=new TestBean();
Parser p=new Parser ();
p.parse(t);
四.尾声
以上就是开发一个注释(annotation)的简单步骤,其实还是挺简单的。这篇博文应该是2014年最后一篇了,2014年即将过去,就以此文深情告别吧,祝2015年好运!