自定义注解和注解的相关使用

自定义注解类MyAnnotation

 1 package lltse.base.annotationdemo;
 2 
 3 import java.lang.annotation.Retention;
 4 import java.lang.annotation.RetentionPolicy;
 5 
 6 //编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。 
 7 @Retention(value=RetentionPolicy.RUNTIME)
 8 public @interface MyAnnotation 
 9 {
10     //可以设置默认值,调用的时候即可不写此属性
11     String name() default "zhangsan";
12     
13     //int 类型
14     //int age();
15     
16     //value
17     //int value();
18     
19     //数组
20     int [] value();
21     
22 }

自定义注解类Table

 1 package lltse.base.annotationdemo;
 2 
 3 import java.lang.annotation.Retention;
 4 import java.lang.annotation.RetentionPolicy;
 5 
 6 //RetentionPolicy.RUNTIME 编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
 7 //RetentionPolicy.CLASS 编译器将把注释记录在类文件中,但在运行时 VM 不需要保留注释。这是默认的行为。 
 8 //RetentionPolicy.SOURCE 编译器要丢弃的注释。
 9 
10 @Retention(RetentionPolicy.RUNTIME)
11 public @interface Table 
12 {
13     /*当此处的属性值仅有一个,且名称为value的时候。
14     调用此注解的时候不需要用value= 只需标出值即可。如:Table("tb_person")*/
15     //String value();
16     
17     String name();
18     
19 }

自定义注解的使用Student

 1 package lltse.base.annotationdemo;
 2 
 3 //@MyAnnotation(name="lisi")
 4 //@MyAnnotation(age=30)
 5 //@MyAnnotation(30)
 6 @MyAnnotation({14,29,40})
 7 public class Student 
 8 {
 9     private int num;
10 
11     public int hashCode()
12     {
13         return num;
14     }
15     
16     public boolean equals(Object o)
17     {
18         return true;
19     }
20 }

自定义注解的使用PersonEntity

 1 package lltse.base.annotationdemo;
 2 
 3 @Table(name="db_person")
 4 public class PersonEntity 
 5 {
 6     private String cardId;
 7     
 8     private String sex;
 9     
10     public String getCardId() {
11         return cardId;
12     }
13 
14     public void setCardId(String cardId) {
15         this.cardId = cardId;
16     }
17 
18     public String getSex() {
19         return sex;
20     }
21 
22     public void setSex(String sex) {
23         this.sex = sex;
24     }
25 
26     
27 }

自定义注解的测试类AnnotationDemo

 

 1 package lltse.base.annotationdemo;
 2 
 3 import java.util.Arrays;
 4 
 5 public class AnnotationDemo {
 6 
 7     /**
 8      * @param args
 9      */
10     public static void main(String[] args) 
11     {
12         /*此处演示的是得到类的注解信息。
13         获取方法的注解和获取类的注解方式类似,先通过反射获取方法。
14         然后通过方法的getAnnotation获取方法的注解*/
15         Class clazz = Student.class;
16         MyAnnotation myAnnotation = (MyAnnotation)clazz.getAnnotation(MyAnnotation.class);
17         //myAnnotation.name()此处获取的值为注解定义设置的默认值
18         //System.out.println("  name:>>>>"+myAnnotation.name());
19         //System.out.println("  age:>>>>"+myAnnotation.age();
20         //System.out.println("  value:>>>>"+myAnnotation.value();
21         System.out.println("  value:>>>>"+Arrays.toString(myAnnotation.value()));
22         
23         
24         //Spring data jpa中即用这种注解方式。需要将表名获取作为条件使用
25         Class personClazz = PersonEntity.class;
26         Table table = (Table)personClazz.getAnnotation(Table.class);
27         System.out.println("Table name:>>>"+table.name()); 
28         
29         
30     }
31 
32 }

 

posted on 2016-05-06 01:09  云中雁荡山  阅读(211)  评论(0编辑  收藏  举报

导航