文章目錄
聲明:該文章是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.那麼我們平時都是掃描某某包下的類中的方法是否含有某某註解,這些如何做到?
可以參考代碼:戳這裏