自定义注解及解析注解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语句可对数据库进行操作。
                    
                
                
            
        
浙公网安备 33010602011771号