spring發展至今,已經從xml到註解加xml,到現在springboot主導的環境,像是一部擯棄xml轉註解的史書。java5推出的註解可謂在各類開源框架大放異彩,發揮着重要的做用。有時候在實際項目中,有一些需求能夠經過註解的方式靈活的進行配置等,就會本身寫一個註解。根據註解參數的個數,咱們能夠將註解分爲:標記註解、單值註解、完整註解三類。本文就打算寫一個小小的註解demo,進入註解世界的大門。java
元註解的做用就是負責註解其餘的註解。java5.0定義了4個標準的meta-annotation類型,它們被用來提供對其餘annotation類型做說明,4個元註解是:spring
主要做用 是用於描述註解的使用範圍,即被描述的註解能夠用在什麼地方:數組
construction構造器,Field成員變量,Local_Variable局部變量,method成員方法,package包,parameter參數,type類 接口 枚舉類springboot
主要表示須要在什麼級別保存該註釋信息,用於描述註解生命週期:框架
runtime運行時有效 source源文件中有效 class編譯文件中有效函數
用於描述其餘類型的annotation應該被做爲被標註的程序成員的公共API,是一個標記註解工具
是一個標記註解,闡述了某個被標註的類型是被繼承的。若是使用了@Inherited修飾的annotation類型被用於一個class,則這個annotation將用於該classspa
分爲兩步:經過@Interface關鍵字聲明註解名稱、註解成員屬性等; 使用Java內置四個元註解對自定義標註的功能和範圍進行約束。.net
自定義註解的格式 public @interface 註解名{定義提},註解參數支持全部基本數據類型,String,Class類型,Enum類型。Annotation類型,以上全部類型的數組。下面自定義一個叫Tt的註解:代理
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Tt { String value() default ""; }
Tt註解能夠註解在方法上,若是想註解在多個地方,能夠在Target註解屬性內加一個數組,相似於@Target({ElementType.METHOD,ElementType.TYPE}) ,同時定義了註解是在運行時被使用(通常都是這樣使用,固然好比lombok這種工具實際上是在編譯時期註解生效的,有興趣能夠看下lombok的源碼)。
若是沒有註解處理的話,註解和註釋同樣,是沒有做用的,因此咱們須要對有註解的方法進行一些業務處理,咱們在main函數啓動的時候,在有tt註解的方法進行先後增長處理業務,完整代碼以下:
public class DefineAnnotationTest { @Test public void testAnnotation() throws InvocationTargetException, IllegalAccessException { DefineAnnotationTest d = new DefineAnnotationTest(); Method[] methods = DefineAnnotationTest.class.getMethods(); for (Method m : methods) { if (m.isAnnotationPresent(Tt.class)){ String value = m.getAnnotation(Tt.class).value(); System.out.println("被Tt註解的 前置邏輯寫在這裏 ,註解參數值是 = " + value); m.invoke(d,new Object[]{}); System.out.println("被Tt註解的 後置邏輯寫在這裏 ,註解參數值是 = " + value); } } } @Tt(value = "6666") public void runWithTemplate() { System.out.println("個人先後面 幫我包裝下。相似於模板模式 或者 代理模式"); } @Tt(value = "最弦民族風") public void trytrytry(){ System.out.println("我就是來試試的"); } }
這段代碼的運行結果:
被Tt註解的 前置邏輯寫在這裏 ,註解參數值是 = 6666 個人先後面 幫我包裝下。相似於模板模式 或者 代理模式 被Tt註解的 後置邏輯寫在這裏 ,註解參數值是 = 6666 被Tt註解的 前置邏輯寫在這裏 ,註解參數值是 = 最弦民族風 我就是來試試的 被Tt註解的 後置邏輯寫在這裏 ,註解參數值是 = 最弦民族風 Process finished with exit code 0
看上去,咱們的註解已經成功的起到了做用。