java基礎之-自定義注解一

(分類信息來自百度搜索)

  • 運行機制分類:
    • 源注解 代碼中注解編譯后class中沒有
    • 編譯時注解 再class中存在的
    • 運行時注解 運行時起作用的注解
  • 按來源分
    • JDK自帶注解
    • 三方注解 最常見
    • 自定義注解
  • 元注解
    • 注解的注解

今天來看看Java的自定義注解,看Java自定義注解前先看看jdk中的三個注解:@Override @Deprecated @SuppressWarnings
@Override:表示當前類覆蓋了父類的方法聪黎。@Deprecated:當前方法過時不再推薦使用 @SuppressWarnings:忽略警告郭卫。
回歸正題看看自定義注解:
java通過@interface 實現注解.來看看下面的自定義注解。

package com.annotation.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Target是這個注解的作用范圍 ElementType.METHOD這個是方法級別的
 * 此外還有:CONSTRUCTOR(構造方法聲明),FIELD(字段聲明),LOCAL VARIABLE(局部變量聲明),
 * METHOD(方法聲明),PACKAGE(包聲明),PARAMETER(參數聲明),TYPE(類接口)
 */
@Target(ElementType.METHOD)
/**
 * @Retention是它的生命周期
 * 取值:SOURCE(只在源碼顯示湿弦,編譯時丟棄),CLASS(編譯時記錄到class中欺税,運行時忽略),
 * RUNTIME(運行時存在分唾,可以通過反射讀取)
 */
@Retention(RetentionPolicy.RUNTIME)
public @interface ShowMessage {
    /**
     * value是注解的成員變量(當只有一個成員變量時必須用value) 可以使用 default指定默認值工禾。
     * 成員變量的類型限定必須是:基本的數據類型以及String运提,Class,Annotation,Enumeration
     * @return
     */
    String value() default "";
}

這樣就定義完一個注解了闻葵∶癖茫可是定義完了怎么用呢?
下來提供兩種解析自定義的注解的方式:1.java 反射解析自定義注解槽畔。2.使用Spring AOP 的Aspectj 解析自定義注解栈妆。
話不多說直接上代碼說明都在代碼注釋里

  1. java 反射解析自定義注解
package com.annotation.impl;

import com.annotation.annotation.ShowMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class AnnotationUtile {
    private static Logger logger= LoggerFactory.getLogger(AnnotationUtile.class);
    //使用上面自定義的注解
    @ShowMessage("this is test")
    private void test(){
        logger.debug("測試信息");
    }
}

我這里使用JUNIT測試解析定義注解

package com.annotation.impl;

import com.annotation.annotation.ShowMessage;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Method;

public class TestMain {
    private static Logger logger= LoggerFactory.getLogger(TestMain.class);

    @Test
    public void  annotation(){
        try {
            //反射獲取使用注解的類
            Class c = Class.forName("com.annotation.impl.AnnotationUtile");
            /**
             * 這里我定義的是方法級注解,這里取對應的方法
             */
            Method[] methods=c.getDeclaredMethods();
            for (Method method:methods){
                /**
                 * isAnnotationPresent() 判斷是否使用注解
                 * 判斷AnnotationUtile是否有ShowMessage注解
                 */
                Boolean ble = method.isAnnotationPresent(com.annotation.annotation.ShowMessage.class);
                if (ble){
                    //獲取注解的實例
                    ShowMessage showMessage = method.getAnnotation(ShowMessage.class);
                    //獲取注解成員變量并打印
                    logger.debug(showMessage.value());

                }
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

運行結果如下:

Connected to the target VM, address: '127.0.0.1:60534', transport: 'socket'
19:02:21.837 [main] DEBUG com.annotation.impl.TestMain - this is test
Disconnected from the target VM, address: '127.0.0.1:60534', transport: 'socket'

Process finished with exit code 0

一會看世界杯了 剩下的稍后再補充。計劃注解再寫兩篇 一篇是Spring AOP 的Aspectj 解析自定義注解鳞尔。另一篇是個綜合應用(一個可擴展的校驗注解:實現再特定業(yè)務下 校驗功能)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末嬉橙,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子寥假,更是在濱河造成了極大的恐慌市框,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糕韧,死亡現場離奇詭異枫振,居然都是意外死亡,警方通過查閱死者的電腦和手機萤彩,發(fā)現死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門粪滤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雀扶,你說我怎么就攤上這事杖小。” “怎么了愚墓?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵予权,是天一觀的道長。 經常有香客問我转绷,道長伟件,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任议经,我火速辦了婚禮,結果婚禮上谴返,老公的妹妹穿的比我還像新娘煞肾。我一直安慰自己,他們只是感情好嗓袱,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布籍救。 她就那樣靜靜地躺著,像睡著了一般渠抹。 火紅的嫁衣襯著肌膚如雪蝙昙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天梧却,我揣著相機與錄音奇颠,去河邊找鬼。 笑死放航,一個胖子當著我的面吹牛烈拒,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼荆几,長吁一口氣:“原來是場噩夢啊……” “哼吓妆!你這毒婦竟也來了?” 一聲冷哼從身側響起吨铸,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤行拢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后诞吱,有當地人在樹林里發(fā)現了一具尸體舟奠,經...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年狐胎,在試婚紗的時候發(fā)現自己被綠了鸭栖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡握巢,死狀恐怖晕鹊,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情暴浦,我是刑警寧澤溅话,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站歌焦,受9級特大地震影響飞几,放射性物質發(fā)生泄漏。R本人自食惡果不足惜独撇,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一屑墨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纷铣,春花似錦卵史、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至啄踊,卻和暖如春忧设,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背颠通。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工址晕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒜哀。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓斩箫,卻偏偏與公主長得像吏砂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乘客,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361