1. 程式人生 > >一分鐘理解註解

一分鐘理解註解

註解這個東西我們肯定每天都能看見,也許有時候看的太多了到是會忽略註解這東西具體是如何工作的。今天在這裡用最短的篇幅快速講解下註解的原理,對這塊記的不太清楚的同學也可以再次看看,下次有人詳細問這塊的話不至於一知半解。

一句話描述:就是元資料,即一種描述資料的資料。所以,可以說註解就是原始碼的元資料。

package com.qk365.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Target說明了Annotation所修飾的物件範圍
 *
 * @Retention定義了該Annotation被保留的時間長短
 * 
 * @Documented可以被例如javadoc此類的工具文件化
 * 
 * @Inherited是否可繼承
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface LogForController {

	/**
	 * 功能描述
	 */
	public String optMemo() default "";

	/**
	 * 操作模組
	 */
	public String optModel() default "";

}

關鍵字解析:

  1. @Rentention用來標記自定義註解的有效範圍 ,即註解的生命週期
  • RetentionPolicy.SOURCE – 在編譯階段丟棄。這些註解在編譯結束之後就不再有任何意義,所以它們不會寫入位元組碼。@Override, @SuppressWarnings都屬於這類註解。
  • RetentionPolicy.CLASS – 在類載入的時候丟棄。在位元組碼檔案的處理中有用。註解預設使用這種方式。
  • RetentionPolicy.RUNTIME– 始終不會丟棄,執行期也保留該註解,因此可以使用反射機制讀取該註解的資訊。我們自定義的註解通常使用這種方式。

      2.– 表示該註解用於什麼地方。如果不明確指出,該註解可以放在任何地方。以下是一些可用的引數。需要說明的是:屬性的註解是相容的,如果你想給7個屬性都添加註解,僅僅排除一個屬性,那麼你需要在定義target包含所有的屬性。

  • ElementType.TYPE:用於描述類、介面或enum宣告
  • ElementType.FIELD:用於描述例項變數
  • ElementType.METHOD
  • ElementType.PARAMETER
  • ElementType.CONSTRUCTOR
  • ElementType.LOCAL_VARIABLE
  • ElementType.ANNOTATION_TYPE 另一個註釋
  • ElementType.PACKAGE 用於記錄java檔案的package資訊

[email protected] 使用了@Documented的可以在javadoc中找到

[email protected]

可繼承性的標識,使用了Interited表示註解裡的內容可以被子類繼承.

[email protected] 這個東西在宣告註解的時候必須得使用,用@interface就意味著這個東西已經繼承了java.lang.annotation.Annotation,也說明了它是一個註解。

註解用途: 1.生成文件。

                    2. 跟蹤程式碼依賴性,實現替代配置檔案功能

                   3. 在編譯時進行格式檢查。

                   4.反射

相關推薦

分鐘理解註解

註解這個東西我們肯定每天都能看見,也許有時候看的太多了到是會忽略註解這東西具體是如何工作的。今天在這裡用最短的篇幅快速講解下註解的原理,對這塊記的不太清楚的同學也可以再次看看,下次有人詳細問這塊的話不至於一知半解。 一句話描述:就是元資料,即一種描述資料的資

帶你分鐘理解閉包--js面向物件程式設計

上一篇《簡單粗暴地理解js原型鏈--js面向物件程式設計》沒想到能攢到這麼多贊,實屬意外。分享是個好事情,尤其是分享自己的學習感悟。所以網上關於原型鏈、閉包、作用域等文章多如牛毛,很多文章寫得很深入很專業,而我卻喜歡用更簡單方式來解說簡單的事情。 什麼是閉包?  先看一段程式碼:

帶你分鐘理解JS閉包——通俗易懂

網上關於閉包的文章有很多,但是大多數都使用了太多專業術語,不便於理解,我在這試著用通俗一點的語言解釋一下何為閉包。 什麼是閉包? 什麼是閉包?閉包是什麼? 先來看一段程式碼: function a(){ var n = 0; function inc() { n+

分鐘理解Flexbox彈性佈局

圖解 Flexbox 本文圖片、部分翻譯來自原文 How Flexbox works — explained with big, colorful, animated gifs 屬性 #1 display: flex 示例如下 上面4個

分鐘理解post和put(安全與冪等角度)

HTTP方法的安全性和冪等性 可以認為安全的方法都是隻讀的方法(GET, HEAD, OPTIONS),不會改變資源狀態,顯然,這三個方法也是冪等的。 DELETE方法的語義表示刪除伺服器上的一個資源,第一次刪除成功後該資源就不存在了,資源狀態改變了,所以DELETE方法不具備安全特

分鐘理解console的這個原理,多留幾根黑髮~

引言 問題: console打印出的值與實際值不符的原因。 碰到這個問題是因為更改某一個值a後將其儲存起來,更改為a1後,然而打印出來的值卻是a1,展開列印的值是a。因為不理解這個現象,導致除錯程式碼走了很多彎路,最後才定位到問題。 先來看現象 原因 程式碼 let a = {

分鐘理解資料庫連線池

問題: 前面介紹了使用JDBC來獲取資料庫的連線,這種方法適用於適用於使用者較少的時候,但當用戶連線量較大時,資源消耗問題就凸顯而出;當一個網站有20萬個使用者訪問時,使用者的每次請求都會向資料庫獲取連線,那麼資料庫伺服器就要建立20萬次連線,而資料庫建立連線時會消耗較大的資源,建立的時間也相對

分鐘理解向後相容

什麼是相容 談到相容,少不了獲得相容收益的目標物件,以及提供相容功能的元件這兩個相互對應的概念。 如果一個目標物件,能否在同一組件的同個不同版本上協同工作,則移該元件的兩個版本是相容的,如下圖所示: 相容性分類 元件的兩個版本是相容的,那就會有新

分鐘理解系列—半導體儲存晶片的知識點總結

在計算機的儲存器中,按儲存介質進行分類的話,可將儲存器分成半導體儲存器、磁表面儲存器、磁芯儲存器、光碟儲存器。而除了半導體儲存器中的資料易失以外,其他的儲存介質都具有非易失的特性。 **那麼,半導體儲存晶片的結構是怎樣的呢?** 話不多說,我們來看下吧。 #### 半導體儲存晶片的基本結構 ![在這裡插

分鐘學會 ConstraintLayout 之從屬性角度理解布局

uic mem app tor normal add 部分 pla ray ConstraintLayout 在 Android 開發中,我們通常是手寫布局,很少會用拖動來寫布局,雖然 ConstraintLayout 在 I/O 上以拖動來展現了各種功能

分鐘內讓你理解什麽是產品經理?

產品經理前幾天在某論壇上看見一個段子,生動形象地描繪出了產品經理、程序員、需求者三者之間那無以言表的關系圖。看完這個段子也深刻體會到今年剛上線的大大神平臺責任重大,該平臺主要以產品經理為特色推出,平臺又要怎樣為三者之間創造出一個和諧共處的環境,讓我很是期待!1.劉大爺有塊地,想蓋個平房養老,聘請小明全權負責蓋

每天進步點點——五分鐘理解一致性雜湊演算法(consistent hashing)

根據上面的圖解分析,一致性雜湊演算法滿足了單調性和負載均衡的特性以及一般hash演算法的分散性,但這還並不能當做其被廣泛應用的原由,因為還缺少了平衡性。下面將分析一致性雜湊演算法是如何滿足平衡性的。hash演算法是不保證平衡的,如上面只部署了NODE1和NODE3的情況(NODE2被刪除的圖),object1

Java 中的覆蓋@Override註解 寫與不寫的點點理解

Java程式碼  /*俺的菜鳥筆記     Java 中的覆蓋@Override註解 寫與不寫的一點點理解     一般來說,寫與不寫沒什麼區別,JVM可以自識別     寫的情況下:即說明子類要覆蓋基

要怎麽理解分鐘快3的走勢技巧呢?怎麽看精準判斷大小單雙?

如果 做到 好的 足夠 不存在 有一個 走勢 容易 目標 導師1614003187如果你是剛剛玩,我來教教你,如果你已經玩很久了,卻不穩,我來拉拉你,如果你已經遍體鱗傷,我來幫幫你. 我不能保證你一夜致富但希望能細水長流,匯聚江海,先要平穩的心態,不要一盤的失誤影響你心情

Spring5原始碼深度解析()之理解Configuration註解

程式碼地址:https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian 1.Spring體系結構 1.1、Spring Core:主要元件是BeanFactory,建立JavaBean的工廠,使用控制反

機器學習():5分鐘理解機器學習並上手實踐

# 引言 現在市面上的機器學習教程大多先學習數學基礎,然後學機器學習的數學演算法,再建立機器學習的數學模型,再學習深度學習,再學習工程化,再考慮落地。這其中每個環節都在快速發展,唯獨落地特別困難。我們花費大量時間成本去學習以上內容,成本無疑是特別昂貴的。所以我們不如先“盲人摸象”、“不求甚解”地探索下機器學

分鐘解決上網速度慢的問題

計算機配置 電腦系統 數據包 程序 沖浪 不要抱怨網速慢,只怪你自己不會調快網速?! 電腦系統都會默認限制20%的網速,我們可以很輕松地解除這個限制,使你的上網速度達到100%,真正地體驗沖浪的感覺.方法如下:開始菜單-運行-輸入"gpedit.msc”-確定-計算機配置-管理模板-網絡-

SVM算法的另外理解

組成 優化 square 隨機梯度 損失函數 -1 entropy 正則化 預測 解決一個機器學習問題的一般套路是先構建一個目標函數,然後解決一個優化問題。目標函數通常由損失函數和正則項組成。常見的損失函數log-loss,square-loss,cross-entropy

Java制作最難練手速遊戲,Faker都堅持不了分鐘

圖形圖像 java 想練手速,來啊,互相傷害啊Java制作最難練手速遊戲,目測Faker也堅持不了一分鐘制作思路:只靠Java實現。Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、Java、

分鐘了解Android橫豎屏 mdpi hdpi xhdpi xxhdpi xxxhdpi

lin msu mage 豎屏 啟動 oar href super ide DPI:每英寸像素數 簡單的屏幕分辨率計算方法: DisplayMetrics metrics = this.getResources().getDisplayMetri