Java基礎之註解類與思考


聲明:該文章是cv的,因爲害怕博主刪文,所以將他的內容搬到我的博客下,並將裏面的重點內容抽取出來,其他多餘解釋刪除。
原文鏈接,戳這裏

Java註解說明

使用範圍

jdk1.5以上

三種標準註解

@Override,表示當前的方法定義將覆蓋超類中的方法。
@Deprecated,使用了註解爲它的元素編譯器將發出警告,因爲註解@Deprecated是不贊成使用的代碼,被棄用的代碼。
@SuppressWarnings,關閉不當編譯器警告信息。

元註解

。。。

java註解使用

註解的可用類型

註解的可用的類型包括以下幾種:所有基本類型、String、Class、enum、Annotation、以上類型的數組形式。元素不能有不確定的值,即要麼有默認值,要麼在使用註解的時候提供元素的值。而且元素不能使用null作爲默認值。註解在只有一個元素且該元素的名稱是value的情況下,在使用註解的時候可以省略“value=”,直接寫需要的值即可。

示例demo

註解定義

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase {
     public String id();
     public String description() default "no description";
}

使用註解

public class PasswordUtils {
    @UseCase(id = "47" , description = "Passwords must contain at least one numeric")
    public boolean validatePassword(String password) {
        return (password.matches("\\w*\\d\\w*"));
    }

    @UseCase(id = "48")
    public String encryptPassword(String password) {
        return new StringBuilder(password).reverse().toString();
    }
}

註解處理器
從原理上講,註解處理器就是通過反射機制獲取被檢查方法上的註解信息,然後根據註解元素的值進行特定的處理。

public static void main(String[] args) {
     List<Integer> useCases = new ArrayList<Integer>();
     Collections.addAll(useCases, 47, 48, 49, 50);
     trackUseCases(useCases, PasswordUtils.class);
 }
 
 public static void trackUseCases(List<Integer> useCases, Class<?> cl) {
     for (Method m : cl.getDeclaredMethods()) {
         UseCase uc = m.getAnnotation(UseCase.class);
         if (uc != null) {
             System.out.println("Found Use Case:" + uc.id() + " "
                         + uc.description());
             useCases.remove(new Integer(uc.id()));
         }
     }
     for (int i : useCases) {
         System.out.println("Warning: Missing use case-" + i);
     }
 }

控制檯輸出

Found Use Case:47 Passwords must contain at least one numeric
Found Use Case:48 no description
Warning: Missing use case-49
Warning: Missing use case-50

Process finished with exit code 0

示例代碼:github

思考與總結

1.根據以上註解的使用介紹,更加清楚了Spring內部的註解工作原理,無非就是通過反射獲取註解,能取到相應註解的才做特殊處理,取不到,就不作處理,雖然總結的很low,但確實就是這樣的。
2.那麼我們平時都是掃描某某包下的類中的方法是否含有某某註解,這些如何做到?
可以參考代碼:戳這裏

其他關於註解的優秀文章

https://www.cnblogs.com/xdp-gacl/p/3622275.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章