Java中自定義註解類及使用例項解析
阿新 • • 發佈:2020-01-07
這篇文章主要介紹了Java中自定義註解類並使用過程解析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
在Java框架中,經常會使用註解,而且還可以省很多事,來了解下自定義註解。
註解是一種能被新增到java程式碼中的元資料,類、方法、變數、引數和包都可以用註解來修飾。註解對於它所修飾的程式碼並沒有直接的影響
先寫一個自己的註解類
@Documented //會被javadoc命令識別 @Retention(RetentionPolicy.RUNTIME) //相當於作用時期,比如:執行期、編譯期 @Target({ElementType.METHOD}) //相當於作用域,比如方法、類 public @interface MyValue { String value(); //也可以這麼寫,就是說,它的預設值是hello //String value() default "hello"; }
然後解析上邊用到的那兩個類:
public enum RetentionPolicy { SOURCE,CLASS,RUNTIME }
public enum ElementType { /** Class,interface (including annotation type),or enum declaration */ TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE,PACKAGE }
可以看到,是兩個列舉類,也就是我們自定義的註解有一定的時間和空間作用域。
好了,我們的自定義註解已經完成了(對的,自定義註解就上邊那一段程式碼),那我們就來看看要怎麼有用呢?很容易啊,就和其他的註解一樣,寫在我們要用到的地方就好了。(對的,我確定不是在開玩笑)
public class Person { @MyValue(value="張三") private String name; /* 為什麼要寫setter和getter,很快你就會知道 */ public String getName() { return name; } public void setName(String name) { this.name = name; } }
然後我們在其他地方去拿
Person person = new Person(); System.out.println(person.getName());//null //這就很難受,按道理來說,不是應該是張三嗎?
大家都知道,像Spring這種框架都是通過反射來實現的,我們就模擬一個“編譯類”,我們是在屬性上用的註解,所以就先用反射來拿到類的所有屬性
public static void main(String[] args) throws NoSuchFieldException { Person person = new Person(); //按理來說,我們是拿到這個Person.class的所有的屬性,然後遍歷,來挨個注入,但是這裡我們明明確我們的屬性名,所以就簡單化了 Field field = Person.class.getDeclaredField("name"); MyValue annotation = field.getAnnotation(MyValue.class);//拿到註解類 String name = annotation.value();//這個value()就是我們在MyValue類中的的屬性 //然後我們就注入到這個類中,這時就用到了setter方法 person.setName(name); System.out.println("通過自定義註解後的person的name是:" + person.getName()); }
是的,這樣我們就通過了自定義註解給Person注入了一個name屬性,但是在實際運用中不可能這麼複雜,這只是入門了一下,我們可以將這個“模擬的編譯類”組裝成一個工具類,以便我們在實際中運用。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。