java自定義註解以及Spring boot配置aop使用自定義註解

前言

隨着springboot的流行,註解使用的越來越多:
在這裏插入圖片描述
Java註解不僅讓我們減少了項目中XML文件,方便了維護,同時也使我們代碼更簡潔。那麼項目中我們如何自定義註解呢?

1. 內置註解

Java註解(Annotation)又稱Java標註,是JDK5.0引入的一種註釋機制。
和Javadoc不同,Java標註可以通過反射獲取標註內容。在編譯器生成類文件時,標註可以被嵌入到字節碼中。 Java虛擬機可以保留註釋內容,在運行時可以獲取到註釋內容。當然它也支持自定義Java註釋。

Java定義了一套註釋解,共有7個,3個在java.lang中,剩下4個在java.lang.annotation中。

作用於代碼的註解

  • @Override:檢查該方法是否是重寫方法。如果發現其父類,或者是引用的接口中並沒有該方法時,會報編譯錯誤。
  • @Deprecated :標記過時方法。如果使用該方法,會報編譯警告。
  • @SuppressWarnings :指示編譯器去忽略註解中聲明的警告。

元註解(作用於註解的註解)

  • @Target:用於描述註解的使用範圍。取值(ElementType)有:
     1.CONSTRUCTOR:應用於構造器。
     2.FIELD:應用於字段或屬性(包括枚舉中的常量)。
     3.LOCAL_VARIABLE:應用於局部變量。
     4.METHOD:應用於方法。
     5.PACKAGE:應用於包。
     6.PARAMETER:應用於參數。
     7.TYPE:類、接口(包括註解類型) 或enum聲明。
     8.ANNOTATION_TYPE:應用於註解類型。
     9.TYPE_PARAMETER:1.8版本新增,應用於類型變量。
     10.TYPE_USE:1.8版本新增,應用於任何使用類型的語句中(例如聲明語句、泛型和強制轉換語句中的類型)。
  • @Inherited:標記這個註解是繼承於哪個註解類。
  • @Retention:用於描述註解的生命週期。取值(RetentionPoicy)有:
      1.SOURCE:在源文件中有效,編譯時被丟棄,不包含在類文件中。
      2.CLASS:在class文件中有效,由編譯器保留,但Java虛擬機(JVM)會忽略。
      3.RUNTIME:由JVM 加載,包含在類文件中,在運行時可以被獲取到。
  • @Document:表明該註解標記的元素可以被Javadoc 或類似的工具文檔化。

從 Java 7 開始,額外添加了 3 個註解:

  • @SafeVarargs :Java 7 開始支持,忽略任何使用參數爲泛型變量的方法或構造函數調用產生的警告。
  • @FunctionalInterface :Java 8 開始支持,標識一個匿名函數或函數式接口。
  • @Repeatable:Java 8 開始支持,標識某註解可以在同一個聲明上使用多次。

2. 自定義註解

使用@interface自定義註解時,自動繼承了java.lang.annotation.Annotation接口,由編譯程序自動完成其他細節。在定義註解時,不能繼承其他的註解或接口。

@interface用來聲明一個註解,其中的每一個方法實際上是聲明瞭一個配置參數。方法的名稱就是參數的名稱,返回值類型就是參數的類型。

定義註解格式如下:

public @interface 註解名 {定義體}

下面是一個具體的例子:

package com.jid.java.test.annotation;

import java.lang.annotation.*;

/**
 * @description: 自定義註解
 * @author: jidi
 * @eamil: [email protected]
 * @create: 2020-04-07 21:19
 **/

@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface OptLog {

    public int optType() default 0;

    public String optMessage() default "";

}

註解參數的可支持數據類型:

  • 所有基本數據類型(intfloatbooleanbytedoublecharlongshort)
  • String類型
  • Class類型
  • enum類型
  • Annotation類型
  • 以上所有類型的數組

定義體中的參數設定,按照以下規定:

  • 只能用public或默認(default)這兩個訪問權修飾.例如,String value();這裏把方法設爲default默認類型。
  • 參數成員只能用基本類型:intfloatbooleanbytedoublecharlongshort八種基本數據類型和 StringEnumClassannotations等數據類型,以及這些類型的數組。
  • 如果只有一個參數成員,最好把參數名稱設爲value

註解元素的默認值:

  • 註解元素必須有確定的值,要麼在定義註解的默認值中指定,要麼在使用註解時指定,非基本類型的註解元素的值不可爲null
  • 使用空字符串或0作爲默認值是一種常用的做法。

3 使用自定義註解

自定義註解跟其它框架提供的註解一樣使用,只是參數值根據實際情況確定。

 @OptLog(optType = 1)
 public void print() {
	...
}

4. spring boot框架aop配置使用自定義註解

在spring boot框架中,使用自定義註解,步驟如下:

  1. 在pom文件引入aop依賴
    在這裏插入圖片描述
    注意:在完成了引入AOP依賴包後。AOP的默認配置屬性中,spring.aop.auto屬性默認是開啓的,也就是說只要引入了AOP依賴後,默認已經增加了@EnableAspectJAutoProxy,不需要在程序主類中增加@EnableAspectJAutoProxy來啓用。

  2. 自定義註解
    在這裏插入圖片描述

  3. 定義切面
    在這裏插入圖片描述

  4. 使用註解

參考鏈接

SpringBoot學習5之自定義註解
SpringBoot 集成AOP 自定義註解
Java實現自定義註解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章