一篇搞定Java注解

參考:https://blog.csdn.net/yeahPeng11/article/details/120394276

https://blog.csdn.net/yeahPeng11/article/details/120330630
https://www.cnblogs.com/CF1314/p/16580232.html

通過現有注解,明白注解是什么東東。

在 SpringBoot中,我們會用到返回值@ResponseBody注解。@ResponseBody返回的是字符串類型數據。

@Target(ElementType.METHOD)         //作用于方法上
@Retention(RetentionPolicy.RUNTIME) //作用在運行時
@Documented                         //生成到文檔里
public @interface ResponseBody {String value();
}

元注解

用于定義注解的注解,包括@Target、@Retention、@Documented、@Inherited。

@Target(目標)

Target意為 目標,指定定義的注解起作用的場景。限定注解的使用場景、使用對象等,注解的使用變得十分明確。它的取值由ElementType類提供。

ElementType.TYPE :作用于類、接口(包括注解類型接口)或者枚舉類型。ElementType.FIELD:作用于字段屬性。ElementType.METHOD:作用于方法。ElementType.PARAMETER:作用于參數。ElementType.CONSTRUCTOR:作用于構造器。ElementType.LOCAL_VARIABLE:作用于局部變量。ElementType.ANNOTATION_TYPE:作用于注解。ElementType.PACKAGE:作用于包。ElementType.TYPE_PARAMETER:作用于類型參數(since jdk1.8)。ElementType.TYPE_USE:作用于使用的類型(since jdk1.8)。ElementType.MODULE:作用于模塊聲明(since jdk9)。在@ResponseBody中,ElementType.METHOD 代表作用在方法上。

@Retention(保留)

Retention意為 保留,解釋這個注解的保留的時間(存活的時間)。它的取值由RetentionPolicy類提供。

? RetentionPolicy.SOURCE:注解只在源碼階段保留,將被編譯器丟棄。

? RetentionPolicy.CLASS:默認行為,注解只被保留到編譯進行的時候,不會被加載到 JVM 中。

? RetentionPolicy.RUNTIME:注解可以保留到程序運行的時候,它會被加載進入到 JVM 中,程序運行時可讀取,可被反射讀取到。

Java代碼保留(存活)的時間段分為 source -> class -> runtime 三個。

@ResponseBody 注解中,@Retention(RetentionPolicy.RUNTIME) 代表作用在運行時。

@Documented(文檔)

Documented意為 文檔,解釋此注解可以生成在 Javadoc 中。

**@**Inherited(繼承)

該注解使父類的注解能被其子類繼承

@Repeatable(可重復)

Repeatable意為 可重復,jdk1.8新特性。它表示修飾的注解可以重復被使用。

例如,在Controller類中,我們無法對一個類或方法增加多個 @RequestMapping 注解,會報錯 does not have a valid java.lang.annotation.Repeatable annotation,但也有注解,比如 @MapperScan 和 @CompentScan 都可以在一個類和方法上重復使用,原因就是該注解用 @Repeatable 注解

注解:

@Retension(RetensionPolicy.RUNTIME)
@Target({ElementTyoe.Type})
@Documented
@Import({MapperScannerRegister.class})   // 聲明是一個配置類
@Repetable(MapperScans.class)
public @interface MapperScanP{}

Java預設的注解

  • @Deprecated:Deprecated意為 棄用、過時,Java語言在不斷的迭代中,針對同一需求不斷的優化解決方案,舊的解決方案就會使用@Deprecated標記過時,但是還是可以正常使用。
  • @Override:重寫父類方法需要使用@Override。
  • @SuppressWarnings:阻止警告。
  • @SafeVarargs:參數安全類型注解。
  • @FunctionalInterface:函數式接口注解,這個是 Java 1.8 版本引入的新特性

Java內建注解

Java提供了三種內建注解。

  1. @Override——當我們想要復寫父類中的方法時,我們需要使用該注解去告知編譯器我們想要復寫這個方法。這樣一來當父類中的方法移除或者發生更改時編譯器將提示錯誤信息。

  2. @Deprecated——當我們希望編譯器知道某一方法不建議使用時,我們應該使用這個注解。Java在javadoc 中推薦使用該注解,我們應該提供為什么該方法不推薦使用以及替代的方法。

  3. @SuppressWarnings——這個僅僅是告訴編譯器忽略特定的警告信息,例如在泛型中使用原生數據類型。它的保留策略是SOURCE(譯者注:在源文件中有效)并且被編譯器丟棄。

問題:

為什么 @GetMapping 注解請求是 Get請求,為什么@RequestMapping 指定請求類型需要用 RequestMethod.POST。

答疑:

首先通過查看 @GetMapping 的源碼

@Target({ElementType.METHOD})
@Retention(RetrntionPolicy.RUNTIME)
@Documented
@RequestMapping(method = {RequestMethod.GET}
)
public @interface GetMapping{}

從源碼中可以看到,@GetMapping引用了注解@RequestMapping,同時含有參數RequestMethod.GET。@RequestMapping注解中的RequestMethod枚舉,也就表明了請求類型的方式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163387.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163387.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163387.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

G320E是一種低榮聲、固定頻率的電荷泵型DC/DC轉換器

G320E 低噪聲電荷泵DC/DC轉換器 產品概述: G320E是一種低榮聲、固定頻率的電荷泵型DC/DC轉換器,在輸入電壓范圍在2.7V到5.0V的情況下,該器件可以產生5V的輸出電壓,最大輸出電流達到300mA.G320E外部元件少,非常適合于…

IP定位揭秘:如何揪出SEM、百度競價惡意點擊

在當今的數字營銷領域,搜索引擎營銷(SEM)和百度競價成為了企業推廣的重要手段。然而,隨著這些渠道的普及,惡意點擊現象也日益嚴重。惡意點擊主要來自競爭對手,或是競價服務的提供商,他們通過點擊…

亞信安慧AntDB MTK數據同步工具之數據稽核

數據稽核是一種用于確保表數據準確性和一致性的重要方法,它涉及到檢查數據的完整性、一致性、有效性和合法性,以及與預期規范的匹配程度等多個方面。隨著大數據時代的到來,通過有效的數據稽核,組織可以提高決策的準確性和效率&…

淺談安科瑞直流電表在荷蘭光伏充電樁系統中的應用

摘要:本文介紹了安科瑞直流電表在荷蘭光伏充電樁系統中的應用。主要用于充電樁的電流電壓電能的計量。 Abstract: This article introduces the application of Acrel DC meters in PV charging pile system in Netherlands.The device is measuring current,volt…

Modbus-RTU協議講解與實戰

1、背景 工作需要,需要使用Modbus-RTU實現RS485通信,于是簡單學習并實踐了一下。 2、參考資料 一文看懂Modbus協議 3、協議說明 3.1、協議類型 當前設備采用Modbus-RTU協議,采用CRC-16_Modbus校驗算法,數據鏈路層使用用標準串口協議,物理層采用RS485進行數據傳輸。 …

python變量、常量、數據類型

一、變量 變量是存儲在內存中的值,這就意味著在創建變量時會在內存中開辟一個空間。 基于變量的數據類型,解釋器會分配指定內存,并決定什么數據可以被存儲在內存中。 因此,變量可以指定不同的數據類型,這些變量可以…

開源Flutter on Desktop項目-極擴安卓開發者工具

極擴-安卓開發者工具 他能干嘛 這個Flutter on Desktop桌面項目可以輔助你開發APP,支持分析一些運行數據以及操作APK安裝等功能,甚至我還加入了Window安卓子系統的功能。 在它的幫助下,你可以快速查看當前正在運行的Activity,給你…

ubuntu/windows/mac小問題記錄

ubuntu刪除snap,釋放dev/mapper/ubuntu–vg-ubuntu–lv使用率100%問題。 當無法用常規方式卸載snapd。粗暴: 刪除 Snap 的目錄 rm -rf ~/snap sudo rm -rf /snap sudo rm -rf /var/snap sudo rm -rf /var/lib/snapd sudo rm -rf /var/cache/snapd刪除 S…

Oracle時間排序字段

要用 TIMESTAMP(6) 不要用 date 因為 date只到秒 ,排序不準確

開發外賣霸王餐返利小程序的步驟有哪些?

外賣霸王餐返利小程序是一種基于社交電商模式的小程序,主要實現用戶和商家的共贏。 開發外賣霸王餐返利小程序的方案可以包括以下幾個步驟: 1、需求分析 明確外賣霸王餐返利小程序的功能和特點。確定用戶可以參與的活動類型、返利規則、用戶界面設計等…

Jmeter 分布式壓測

為什么要分布式 jmeter是100%純java開發的程序,虛擬用戶是以線程實現的,在大量并發情況下,很容易出現CPU、內存消耗過大的問題,甚至會出現java內存溢出。一般一臺電腦設置500-600線程數即可,如果超過1000線程&#xf…

vue - - - - - vue-qr插件生成二維碼

vue-qr插件生成二維碼 1. 安裝插件2. 組件使用示例圖&#xff1a;掃碼結果 1. 安裝插件 【vue-qr 官網地址】 npm install vue-qr --save // or yarn add vue-qr --save2. 組件使用 <template><vue-qr :logo-src"logoSrc":size"237":margin&qu…

php一句話木馬免殺

php一句話木馬免殺 針對于php一句話木馬做免殺&#xff1a; 利用php動態函數的特性&#xff0c;將危險函數拆分成字符&#xff0c;最終使用字符串拼接的方式&#xff0c;然后重新拼接&#xff0c;后加括號執行代碼&#xff0c;并且可以使用花指令進行包裝&#xff0c;如無限i…

Pol8891 規格書 ——圖像處理芯片/RGB轉MIPI支持圖像 90°/270°旋轉處理

一、芯片簡介 1、系統 高性能 MIPS 32bit CPU 內核&#xff1b; 高性能 DSP 內核圖像處理單元&#xff1b; 8KB 指令 Cache&#xff1b; 8KB 數據 Cache&#xff1b; 64KB OnChip SRAM&#xff1b; 內嵌 DDR3 控制器&#xff1b; 2、RGB 輸入 支持 RGB666、RGB888 輸入…

中電金信:《保險業監管研究及數字化轉型方向探索白皮書》

縱觀近二十年保險業從信息化向數字化的演進過程&#xff0c;我們感受到了數字化轉型階段性成果漸成的喜悅&#xff0c;同時也深深的體會到數字化轉型在“痛并快樂著”的歷程中的種種艱辛。當今世界正處于百年未有之大變局&#xff0c;隨著我國保險市場的供需格局演變和外部環境…

【Unity】EventSystem.current.IsPointerOverGameObject()對碰撞體起作用

本來我是用 EventSystem.current.IsPointerOverGameObject()來檢測是否點擊在UI上的&#xff0c;但是發現&#xff0c;他對我的碰撞體也是返回ture,研究半天。。。。找不出問題&#xff0c;然后發現我的相機上掛載了PhysicsRaycaster&#xff0c;去掉之后就好了&#xff0c;至于…

Mapbox中點圖層和面圖層點擊事件重疊,禁止點擊穿透方案

使用mapbox的小伙伴們可能都遇到過這個問題,就是當地圖上有兩個圖層,一個面圖層一個點圖層,二者相重合的時候。假設我們想點擊點位彈窗展示一些內容,也想點擊面圖層的時候彈窗展示一些內容,這時候一個有意思的問題就產生了,就是點擊點位彈窗的時候面圖層對應的彈窗也會彈…

計算二叉樹雙分支節點的個數(可運行)

如果對您有用&#xff0c;點個贊&#xff0c;關注一下哦&#xff01;畢竟像我這種不用付monyY的博主不多了&#xff0c;且行且珍惜吧&#xff01;俺只想要數據【偷笑】 運行環境.cpp 如果沒有輸出結果一定是建樹錯誤&#xff01;&#xff01;&#xff01;&#xff01;&#x…

libbz2 for Mac OS makefile

git地址&#xff1a;git://sourceware.org/git/bzip2.git a文件Makefile # ------------------------------------------------------------------ # This file is part of bzip2/libbzip2, a program and library for # lossless, block-sorting data compression. # # bzip…

MySQL-01-MySQL基礎架構

1-MySQL邏輯結構 如果能在頭腦中構建一幅MySQL各組件之間如何協同工作的架構圖&#xff0c;有助于深入理解MySQL服務器。下圖展示了MySQL的邏輯架構圖。 MySQL邏輯架構整體分為三層&#xff0c;最上層為客戶端層&#xff0c;并非MySQL所獨有&#xff0c;諸如&#xff1a;連接處…