java annotation 用法

来源:互联网 发布:流量电话软件 编辑:程序博客网 时间:2024/06/04 19:25

类注释

@Target(ElementType.TYPE)  

@Retention(RetentionPolicy.RUNTIME)
@Documented  
public @interface Description {
String value(); 

}


方法注释

//注意这里的@Target与@Description里的不同,参数成员也不同  
@Target(ElementType.METHOD)  
@Retention(RetentionPolicy.RUNTIME)  
public @interface Person {  
    String id();  
    String name();  
}  


注释的值是数组的情况

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Names {

//类似于 @Target({ElementType.PACKAGE, ElementType.TYPE})
   String[] value();
}


用法:

//类注释
@Description("xuejx 测试")
public class Test {
//方法注释
@Person(id="1",name="xuejianxin test1方法")
public void test1 (){
System.out.println("test2 方法");
}

@Person(id="2",name="xuejianxin test2方法")
public void test2 (){
System.out.println("test2 方法");
}

//测试数组注释
@Names({"xuejianxin1","xuejianxin2"})
public void test3 (){
System.out.println("test3 方法");
}
}


通过反射来获取信息

public static void main(String[] args) {
 Class c=Test.class;
 //类的注释
 if(c.isAnnotationPresent(Description.class)){
 Description des = (Description)c.getAnnotation(Description.class);  
          System.out.println("描述:"+des.value());  
          System.out.println("-----------------");
 }
 //一般方法注释
 Method[] methods=c.getDeclaredMethods();
 for(int i=0;i<methods.length;i++){
 if( methods[i].isAnnotationPresent(Person.class)){
   Person p = methods[i].getAnnotation(Person.class);  
           System.out.println("id :"+p.id());  
           System.out.println("名称:"+p.name());  
 
 }
//数组的注释处理
if( methods[i].isAnnotationPresent(Names.class)){
   Names names = methods[i].getAnnotation(Names.class);  
   String[] nameArary=names.value();
   for(int j=0;j<nameArary.length;j++){
    System.out.println(nameArary[j]);
   }
 }
 }
}

以下是程序输出


描述:xuejx 测试
-----------------
id :1
名称:xuejianxin test1方法
id :2
名称:xuejianxin test2方法
xuejianxin1
xuejianxin2