注释(annotation)的开发

      注释(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年好运!

      

你可能感兴趣的:(注释(annotation)的开发)