反射-注解-Java

 1 package com.foreign;
 2 
 3 import java.lang.annotation.Annotation;
 4 import java.lang.reflect.Field;
 5 import java.lang.reflect.Method;
 6 
 7 /**
 8  * Created with IDEA
 9  * author:foreign
10  * Date:2019/9/30
11  * Time:15:33
12  */
13 public class ReflectionFk {
14     public static void main(String[] args) throws NoSuchMethodException, NoSuchFieldException {
15         Class clazz = PersonFk.class;
16         //1 获取类上所有的注解
17         Annotation[] annotations = clazz.getAnnotations();
18         for (Annotation annotation : annotations) {
19             if (annotation instanceof ClassAnnotation) {
20                 ClassAnnotation classAnnotation = (ClassAnnotation) annotation;
21                 System.out.println("类注解的name:" + classAnnotation.name());
22                 System.out.println("类注解的value:" + classAnnotation.value());
23             }
24         }
25         //1.1 指定某个类上具体的注解
26         Annotation annotation = clazz.getAnnotation(ClassAnnotation.class);
27         if (annotation instanceof ClassAnnotation) {
28             ClassAnnotation classAnnotation = (ClassAnnotation) annotation;
29             System.out.println("类注解的name:" + classAnnotation.name());
30             System.out.println("类注解的value:" + classAnnotation.value());
31         }
32 
33         //2 获取方法上所有的注解
34         Method getName = clazz.getMethod("getName");
35         Annotation[] annotations1 = getName.getAnnotations();
36         for (Annotation anno : annotations1) {
37             if (anno instanceof MethodAnnotation) {
38                 MethodAnnotation methodAnnotation = (MethodAnnotation) anno;
39                 System.out.println("方法注解的name:" + methodAnnotation.name());
40                 System.out.println("方法注解的value:" + methodAnnotation.value());
41             }
42         }
43         //2.1 指定某个方法上具体的注解
44         Annotation annotation1 = getName.getAnnotation(MethodAnnotation.class);
45         if (annotation1 instanceof MethodAnnotation) {
46             MethodAnnotation methodAnnotation = (MethodAnnotation) annotation1;
47             System.out.println("方法注解的name:" + methodAnnotation.name());
48             System.out.println("方法注解的value:" + methodAnnotation.value());
49         }
50 
51         //3 参数注解
52         Method method = clazz.getMethod("setName", String.class);
53         Annotation[][] parameterAnnotations = method.getParameterAnnotations();
54         Class<?>[] parameterTypes = method.getParameterTypes();
55         int i = 0;
56         for (Annotation[] para : parameterAnnotations) {
57             Class<?> parameterType = parameterTypes[i++];
58             for (Annotation annotation2 : para) {
59                 if(annotation2 instanceof ParaAnnotation) {
60                     ParaAnnotation paraAnnotation = (ParaAnnotation) annotation2;
61                     System.out.println("方法参数注解的type:" + parameterType);
62                     System.out.println("方法参数注解的name:" + paraAnnotation.name());
63                     System.out.println("方法参数注解的value:" + paraAnnotation.value());
64                 }
65             }
66         }
67 
68         //4 变量注解
69         Field name = clazz.getDeclaredField("name");
70         Annotation[] annotations2 = name.getAnnotations();
71         for (Annotation field : annotations2) {
72             if(field instanceof FieldAnnotation) {
73                 FieldAnnotation fieldAnnotation = (FieldAnnotation) field;
74                 System.out.println("字段注解的name:" + fieldAnnotation.name());
75                 System.out.println("字段注解的value:" + fieldAnnotation.value());
76             }
77         }
78     }
79 }
 1 package com.foreign;
 2 
 3 import java.lang.annotation.ElementType;
 4 import java.lang.annotation.Retention;
 5 import java.lang.annotation.RetentionPolicy;
 6 import java.lang.annotation.Target;
 7 
 8 /**
 9  * Created with IDEA
10  * author:foreign
11  * Date:2019/9/30
12  * Time:15:30
13  */
14 //表示在运行时允许通过反射访问
15 @Retention(RetentionPolicy.RUNTIME)
16 //表示可以用在类,接口,枚举类型上
17 @Target(ElementType.TYPE)
18 public @interface ClassAnnotation {
19     public String name();
20 
21     public String value();
22 }
 1 package com.foreign;
 2 
 3 import java.lang.annotation.ElementType;
 4 import java.lang.annotation.Retention;
 5 import java.lang.annotation.RetentionPolicy;
 6 import java.lang.annotation.Target;
 7 
 8 /**
 9  * Created with IDEA
10  * author:foreign
11  * Date:2019/9/30
12  * Time:16:00
13  */
14 @Retention(RetentionPolicy.RUNTIME)
15 @Target(ElementType.FIELD)
16 public @interface FieldAnnotation {
17     public String name();
18 
19     public String value();
20 }
 1 package com.foreign;
 2 
 3 import java.lang.annotation.ElementType;
 4 import java.lang.annotation.Retention;
 5 import java.lang.annotation.RetentionPolicy;
 6 import java.lang.annotation.Target;
 7 
 8 /**
 9  * Created with IDEA
10  * author:foreign
11  * Date:2019/9/30
12  * Time:15:43
13  */
14 @Retention(RetentionPolicy.RUNTIME)
15 //表示可以用在方法上
16 @Target(ElementType.METHOD)
17 public @interface MethodAnnotation {
18     public String name();
19 
20     public String value();
21 }
 1 package com.foreign;
 2 
 3 import java.lang.annotation.ElementType;
 4 import java.lang.annotation.Retention;
 5 import java.lang.annotation.RetentionPolicy;
 6 import java.lang.annotation.Target;
 7 
 8 /**
 9  * Created with IDEA
10  * author:foreign
11  * Date:2019/9/30
12  * Time:15:54
13  */
14 @Retention(RetentionPolicy.RUNTIME)
15 @Target(ElementType.PARAMETER)
16 public @interface ParaAnnotation {
17     public String name();
18 
19     public String value();
20 }
 1 package com.foreign;
 2 
 3 /**
 4  * Created with IDEA
 5  * author:foreign
 6  * Date:2019/9/30
 7  * Time:15:29
 8  */
 9 @ClassAnnotation(name = "foreignClass", value = "foreignAnnotation")
10 public class PersonFk {
11     @FieldAnnotation(name = "foreignField", value = "foreignAnnotation")
12     private String name;
13     private Integer age;
14     private Boolean gender;
15     public String desc;
16     private String departmentId;
17 
18     public PersonFk(String name, Integer age, Boolean gender, String desc, String departmentId) {
19         this.name = name;
20         this.age = age;
21         this.gender = gender;
22         this.desc = desc;
23         this.departmentId = departmentId;
24     }
25 
26     public PersonFk(String departmentId) {
27         this.departmentId = departmentId;
28     }
29 
30     public PersonFk() {
31     }
32 
33     @MethodAnnotation(name = "foreignMethod", value = "foreignAnnotation")
34     public String getName() {
35         return name;
36     }
37 
38     public void setName(@ParaAnnotation(name = "foreignPara", value = "foreignAnnotation") String name) {
39         this.name = name;
40     }
41 
42     public Integer getAge() {
43         return age;
44     }
45 
46     public void setAge(Integer age) {
47         this.age = age;
48     }
49 
50     public Boolean getGender() {
51         return gender;
52     }
53 
54     public void setGender(Boolean gender) {
55         this.gender = gender;
56     }
57 
58     public String getDesc() {
59         return desc;
60     }
61 
62     public void setDesc(String desc) {
63         this.desc = desc;
64     }
65 
66     private String getDepartmentId() {
67         return departmentId;
68     }
69 
70     public void setDepartmentId(String departmentId) {
71         this.departmentId = departmentId;
72     }
73 }

 

posted @ 2019-09-30 16:17  青稞123  阅读(169)  评论(0编辑  收藏  举报