Java中自定義注解類及使用實例解析
這篇文章主要介紹了Java中自定義注解類并使用過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(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 {
/** Class, interface (including annotation type), or enum declaration */
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ù)雜,這只是入門了一下,我們可以將這個“模擬的編譯類”組裝成一個工具類,以便我們在實際中運用。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java多線程編程中使用Condition類操作鎖的方法詳解
Condition是java.util.concurrent.locks包下的類,提供了對線程鎖的更精細(xì)的控制方法,下面我們就來看一下Java多線程編程中使用Condition類操作鎖的方法詳解2016-07-07
使用@PathVariable注解如何實現(xiàn)動態(tài)傳值
這篇文章主要介紹了使用@PathVariable注解如何實現(xiàn)動態(tài)傳值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
Java使用easypoi快速導(dǎo)入導(dǎo)出的實現(xiàn)
這篇文章主要介紹了實現(xiàn)Java使用easypoi快速導(dǎo)入導(dǎo)出的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03
Java數(shù)據(jù)結(jié)構(gòu)之隊列的簡單定義與使用方法
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之隊列的簡單定義與使用方法,簡單描述了隊列的功能、特點,并結(jié)合java實例形式分析了隊列的簡單定義與使用方法,需要的朋友可以參考下2017-10-10

