自定義注解-並判斷方法或字段是否設置了注解


 1 在定義注解時我們會用到該注解:
    @Retention(RetentionPolicy.RUNTIME)它有以下三個選項來說明它的生存周期。
2 /** 3 SOURCE級別表示代碼級別可見,經過編譯器編譯生成字節碼對象時,此注解就沒了。 4 * 比如@override就是代碼級別可見 5 */ 6 SOURCE, 7 8 /* 9 * CLASS表示字節碼對象級別可見,但是字節碼對象被虛擬機加載時, 10 * 這個注解會被拋棄,這是默認的可見級別 11 */ 12 CLASS, 13 14 /** 15 16 * RUNTIME表示運行時也可見,當虛擬機加載字節碼對象時,此注解仍然可見。 17 * 因此可以通過反射獲取注解信息,然后完成相應的注解解析工作,一般自定義的注解都是運行時可見。 18 */ 19 RUNTIME 20 21 /*現在我們定義一個注解*/ 22 23 import java.lang.annotation.ElementType; 24 import java.lang.annotation.Retention; 25 import java.lang.annotation.RetentionPolicy; 26 import java.lang.annotation.Target; 27 /*用來設置注解可以加到哪里*/ 28 @Target(ElementType.METHOD) 29 /*用來確定注解的生命周期*/ 30 @Retention(RetentionPolicy.RUNTIME) 31 public @interface TestAnnotationString { 32 String name() ; 33 String email() default "tjs"; 34 }

接下來我們創建使用該注解的類

1 public class TestAnnotation {
2 
3     @TestAnnotationString(name="tjs")
4     public void out(){
5         System.out.println("tjs");
6     }
7 }

接下來我們來獲取某個類的方法或字段有幾個設置該注解

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class TestAnnotationMain {
   public static void main(String[] args){

            TestAnnotationMain util=new TestAnnotationMain();
            util.getInfomation(TestAnnotation.class);
        }

        /*
         *這個方法用於注解的解析,其輸入是Class類型的對象。通過反射這個Class對象獲取相關的注解,進行注解的解析
         */
        public void getInfomation(Class<?>clazz){

            //因為注解是在成員方法上,因此需要獲得類的所有方法信息
            Method[] Methods = clazz.getMethods();

            //如果注解是在成員字段上,因此需要獲得類的所有字段信息
            Field[] filed22 = clazz.getFields();

            for (Method field : Methods) {
                //判斷這個字段上是否有相應的注解信息(FruitName.class)
                if (field.isAnnotationPresent(TestAnnotationString.class)) {

                    TestAnnotationString tjs = field.getAnnotation(TestAnnotationString.class);
                    System.out.println("注釋"+field.getName()+"   " +tjs.name());
                }

            }



        }


}

 

 通過自定義注解還可以配合SpringMVC來判斷加某個注解的方法訪問不需要登錄,以及日志的的記錄。

 

本文參考自:https://blog.csdn.net/andyzhu_2005/article/details/81355399 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM