注解的创建和使用

什么是注解这些东西请看 think in java 
在这个实例中演示的是注解的创建和利用反射原理去获取代码信息
 

1、解释本实例用到的注解及解释 
2、创建注解 
3、创建使用注解的类 
4、利用反射机制去解析类代码信息
 
============================================================================================

1、注解的方法不能有参数 
   注解的返回类型是 “基本类型” “字符串” “枚举” “Class” “返回类型的数组” 
   注解可以添加元注解: 
   Documented:将此注解包在javadoc中 
   Target:表示该注解用在什么地方,method:声明方法 
   Inherited:表示继承父类中的注解 
   Retention:表示在什么级别保存该注解信息,RetentionPolicy.RUNTIME:运行期 间保留 

2、

Java代码   收藏代码
  1. package com.gyj.annotation;  
  2.   
  3. import java.lang.annotation.Documented;  
  4. import java.lang.annotation.ElementType;  
  5. import java.lang.annotation.Inherited;  
  6. import java.lang.annotation.Retention;  
  7. import java.lang.annotation.RetentionPolicy;  
  8. import java.lang.annotation.Target;  
  9.   
  10. /** 
  11.  * 创建注解 
  12.  * @author GYJ 
  13.  * @date 2014-3-23 
  14.  */  
  15.   
  16. @Documented  
  17. @Target(ElementType.METHOD)  
  18. @Inherited  
  19. @Retention(RetentionPolicy.RUNTIME)  
  20. public @interface MethodInfo {  
  21.     String author() default "gyj";  
  22.     String date();   
  23.     int revision() default 1;  
  24.     String comments();  
  25. }  



3、

Java代码   收藏代码
  1. package com.gyj.annotation;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. public class AnnotationExample {  
  7.   
  8.     /** 
  9.      * @param args 
  10.      */  
  11.     public static void main(String[] args) {  
  12.           
  13.     }  
  14.       
  15.     @Override  
  16.     @MethodInfo(author = "gyj", comments = "main method", date = "2014", revision = 1)  
  17.     public String toString() {  
  18.         return "overriden to string method";  
  19.     }  
  20.       
  21.     @Deprecated  
  22.     @MethodInfo(comments = "method1", date = "2019")  
  23.     public static void oldMethod() {  
  24.         System.out.println("old method don't use it");  
  25.     }  
  26.       
  27.     @SuppressWarnings({"unchecked""deprecation"})  
  28.     @MethodInfo(author = "gyj", comments = "main genericsTest", date = "2015", revision = 2)  
  29.     public static void genericsTest() {  
  30.         List l = new ArrayList<>();  
  31.         l.add("abc");  
  32.         //发出警告  
  33.         oldMethod();  
  34.     }  
  35.   
  36. }  



4、

Java代码   收藏代码
  1. package com.gyj.annotation;  
  2.   
  3. import java.lang.annotation.Annotation;  
  4. import java.lang.reflect.Method;  
  5.   
  6. public class AnnotationParsing {  
  7.   
  8.     /** 
  9.      * 解析注解 
  10.      * @param args 
  11.      */  
  12.     public static void main(String[] args) {  
  13.         try {  
  14.             Method[] method = Class.forName("com.gyj.annotation.AnnotationExample").getMethods();  
  15.             for (Method method1 : method) {  
  16.                 //验证MethodInfo注解是否可以继承  
  17.                 if (method1.isAnnotationPresent(com.gyj.annotation.MethodInfo.class)) {  
  18.                     for (Annotation annotation : method1.getAnnotations()) {  
  19.                         //具体的注解信息和方法  
  20.                         System.out.println("注解" + annotation + "存在方法" + method1 + "\n");  
  21.                     }  
  22.                     //根据注解信息条件性的做出操作  
  23.                     MethodInfo methodInfo = method1.getAnnotation(MethodInfo.class);  
  24.                     if (methodInfo.revision() == 1) {  
  25.                         System.out.println("revision 是 1 的方法是 " + methodInfo);  
  26.                     }  
  27.                 }  
  28.             }  
  29.         } catch (SecurityException | ClassNotFoundException e) {  
  30.             e.printStackTrace();  
  31.         }  
  32.     }  
  33.       
  34.     //out put===========================  
  35.     /*注解@com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=main method, date=2014)存在方法public java.lang.String com.gyj.annotation.AnnotationExample.toString() 
  36.  
  37.     revision 是 1 的方法是 @com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=main method, date=2014) 
  38.     注解@java.lang.Deprecated()存在方法public static void com.gyj.annotation.AnnotationExample.oldMethod() 
  39.  
  40.     注解@com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=method1, date=2019)存在方法public static void com.gyj.annotation.AnnotationExample.oldMethod() 
  41.  
  42.     revision 是 1 的方法是 @com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=method1, date=2019) 
  43.     注解@com.gyj.annotation.MethodInfo(author=gyj, revision=2, comments=main genericsTest, date=2015)存在方法public static void com.gyj.annotation.AnnotationExample.genericsTest()*/  
  44.   
  45.   
  46.   
  47. }  

猜你喜欢

转载自yuan198906030.iteye.com/blog/2035390