Java類注釋自定義,并加以運用

Java類注釋自定義,并加以運用

長沙達(dá)內(nèi)教育      2022-04-12 07:56:02     14

Java類注釋自定義,并加以運用,在Java框架中,經(jīng)常會使用注解,而且還可以省很多事,來了解下自定義注解。注解是一種能被添加到j(luò)ava代碼中的元數(shù)據(jù),類、方法、

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細(xì)介紹

在Java框架中,經(jīng)常會使用注解,而且還可以省很多事,來了解下自定義注解。

注解是一種能被添加到j(luò)ava代碼中的元數(shù)據(jù),類、方法、變量、參數(shù)和包都可以用注解來修飾。注解對于它所修飾的代碼并沒有直接的影響

先寫一個自己的注解類

documented//會被javadoc命令識別Retention(RetentionPolicy.RUNTIME)//相當(dāng)于作用時期,比如:運行期、編譯期Target({ElementType.METHOD})//相當(dāng)于作用域,比如方法、類public interface MyValue{String value();//也可以這么寫,就是說,它的默認(rèn)值是hello//String value()default"hello";}

然后解析上邊用到的那兩個類:

public enum RetentionPolicy{SOURCE,CLASS,RUNTIME}public enum ElementType{TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE,PACKAGE}

可以看到,是兩個枚舉類,也就是我們自定義的注解有一定的時間和空間作用域。

好了,我們的自定義注解已經(jīng)完成了(對的,自定義注解就上邊那一段代碼),那我們就來看看要怎么有用呢?很容易啊,就和其他的注解一樣,寫在我們要用到的地方就好了。(對的,我確定不是在開玩笑)

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

//這就很難受,按道理來說,不是應(yīng)該是張三嗎?

大家都知道,像Spring這種框架都是通過反射來實現(xiàn)的,我們就模擬一個“編譯類”,我們是在屬性上用的注解,所以就先用反射來拿到類的所有屬性

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屬性,但是在實際運用中不可能這么復(fù)雜,這只是入門了一下,我們可以將這個“模擬的編譯類”組裝成一個工具類,以便我們在實際中運用。

以上就是長沙達(dá)內(nèi)教育java培訓(xùn)機構(gòu)的小編針對“Java類注釋自定義,并加以運用”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。

培訓(xùn)啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險,謹(jǐn)防上當(dāng)。