自定义注解及解析注解Demo

个人对注解的理解:

  注解是配于解析使用的,其本身和注释没有什么区别,都是对于代码的解释,只不过注解可以简化配置文件,加入所需的信息数据,方便对于某些数据的操作,如:sql语句的拼写。

一:自定义注解

  分别定义两个注解:一个用于类,一个用于属性

 1 import java.lang.annotation.ElementType;
 2 import java.lang.annotation.Retention;
 3 import java.lang.annotation.RetentionPolicy;
 4 import java.lang.annotation.Target;
 5 
 6 
 7 //该注解只用于类
 8 @Target(ElementType.TYPE)
 9 @Retention(RetentionPolicy.RUNTIME)
10 public @interface ZiDingYi {
11     //类可以有名字
12     String value();
13 }
 1 import java.lang.annotation.ElementType;
 2 import java.lang.annotation.Retention;
 3 import java.lang.annotation.RetentionPolicy;
 4 import java.lang.annotation.Target;
 5 
 6 //该注解只用于属性
 7 @Target(ElementType.FIELD)
 8 @Retention(RetentionPolicy.RUNTIME)
 9 public @interface Fisss {
10     //属性名
11     String fieldName();
12     //属性长度
13     String fieldLength();
14     
15 }

二:创建普通类Demo

 1 /**
 2  *     普通类
 3  */
 4 @ZiDingYi("类的名字")    //类的注解
 5 public class Test01 {
 6     @Fisss(fieldName = "zhang",fieldLength = "10")    //属性的注解
 7     public  String namess;
 8     @Fisss(fieldName = "feng",fieldLength = "100")    //属性的注解
 9     private String age;
10     
11     public String getName() {
12         return namess;
13     }
14     public void setName(String namess) {
15         this.namess = namess;
16     }
17     public String getAge() {
18         return age;
19     }
20     public void setAge(String age) {
21         this.age = age;
22     }
23 }

三:对注解进行解析

 1 import java.lang.annotation.Annotation;
 2 import java.lang.reflect.Field;
 3 
 4 /**
 5  *     通过反射解析类中注解
 6  */
 7 public class Test02 {
 8     public static void main(String[] args) {
 9         try {
10             //通过类全名获取类的class信息
11             Class classs = Class.forName("com.zhx.Test01");
12             //获得该类的所有注解(注意是类上的)
13             Annotation[] annotations = classs.getAnnotations();
14             //遍历输入类上的注解
15             for (Annotation annotation : annotations) {
16                 System.out.println(annotation);
17             }
18             //获取该类的指定注解
19             ZiDingYi ziDingYi = (ZiDingYi)classs.getAnnotation(ZiDingYi.class);
20             System.out.println(ziDingYi.value());
21             //获得类下的所有属性
22             Field[] declaredFields = classs.getDeclaredFields();
23             for (int i = 0; i < declaredFields.length; i++) {
24                 System.out.println(declaredFields[i]);
25             }
26             //获得该类下的指定属性
27             Field declaredField = classs.getDeclaredField("namess");
28             //获取该属性的指定注解
29             Fisss fisss = declaredField.getAnnotation(Fisss.class);
30             System.out.println("字段名:"+fisss.fieldName() + "------字段长度:" + fisss.fieldLength());31         } catch (ClassNotFoundException e) {
32             e.printStackTrace();
33         } catch (NoSuchFieldException e) {
34             e.printStackTrace();
35         } catch (SecurityException e) {
36             e.printStackTrace();
37         }
38     }
39 }

结果:

  @com.zhx.ZiDingYi(value=类的名字)
  类的名字
  public java.lang.String com.zhx.Test01.namess
  private java.lang.String com.zhx.Test01.age
  字段名:zhang------字段长度:10

解析出在注解中设置的数据,即可拼接sql语句可对数据库进行操作。

posted @ 2020-08-05 20:14  梅竹疯狂打豆豆  阅读(308)  评论(0)    收藏  举报