您好,登錄后才能下訂單哦!
Java中怎么自定義注解類,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
在Java框架中,經(jīng)常會使用注解,而且還可以省很多事,來了解下自定義注解。
注解是一種能被添加到j(luò)ava代碼中的元數(shù)據(jù),類、方法、變量、參數(shù)和包都可以用注解來修飾。注解對于它所修飾的代碼并沒有直接的影響
先寫一個(gè)自己的注解類
@Documented //會被javadoc命令識別@Retention(RetentionPolicy.RUNTIME) //相當(dāng)于作用時(shí)期,比如:運(yùn)行期、編譯期@Target({ElementType.METHOD}) //相當(dāng)于作用域,比如方法、類public @interface MyValue { String value(); //也可以這么寫,就是說,它的默認(rèn)值是hello //String value() default "hello";}
然后解析上邊用到的那兩個(gè)類:
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}
可以看到,是兩個(gè)枚舉類,也就是我們自定義的注解有一定的時(shí)間和空間作用域。好了,我們的自定義注解已經(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這種框架都是通過反射來實(shí)現(xiàn)的,我們就模擬一個(gè)“編譯類”,我們是在屬性上用的注解,所以就先用反射來拿到類的所有屬性
public static void main(String[] args) throws NoSuchFieldException { Person person = new Person(); //按理來說,我們是拿到這個(gè)Person.class的所有的屬性,然后遍歷,來挨個(gè)注入,但是這里我們明明確我們的屬性名,所以就簡單化了 Field field = Person.class.getDeclaredField("name"); MyValue annotation = field.getAnnotation(MyValue.class);//拿到注解類 String name = annotation.value();//這個(gè)value()就是我們在MyValue類中的的屬性 //然后我們就注入到這個(gè)類中,這時(shí)就用到了setter方法 person.setName(name); System.out.println("通過自定義注解后的person的name是:" + person.getName()); }
是的,這樣我們就通過了自定義注解給Person注入了一個(gè)name屬性,但是在實(shí)際運(yùn)用中不可能這么復(fù)雜,這只是入門了一下,我們可以將這個(gè)“模擬的編譯類”組裝成一個(gè)工具類,以便我們在實(shí)際中運(yùn)用。
關(guān)于Java中怎么自定義注解類問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。