spring框架注解多?注解到底是个什么东西?这篇文章给你讲明白
目錄
什么是注解
內置注解:
元注解:
自定義注解:
什么是注解
1.Annotation是從JDK5.0開始引入的新技術。 Annotation的作用: 2.不是程序本身,可以對程序作出解釋。(這一點和注釋(comment)沒什么區別) 3.可以被其他程序(比如編譯器等)讀取。 Annotation的格式: 4.注解是以“@注釋名”在代碼中存在的,還可以 添加一些參數值,例如@SuppressWarnings(value="unchecked"). Annotation在哪里使用: 5.可以附加在package、class、method、field等上面,相當于給他們添加了額外的輔助信息,我們可以通過反射機制編程實現對這些元數據的訪問。內置注解:
?? ?@Override:定義在java.lang.Override中,此注釋只適用于修辭方法,表示一個方法聲明打算重寫超類中的另一個方法聲明。
?? ?@Deprecated:定義在java.lang.Deprecated中,此注釋可以用于修辭方法,屬性,類,表示不鼓勵程序員使用這樣的元素,通常是因為它很危險或者存在更好的選擇。
?? ?@SuppressWarnings:定義在java.lang.SuppressWarnings中,用來抑制編譯時的警告信息,與前兩個注釋有所不同,你需要添加一個參數才能正確使用,這些參數都是已經定義好的:@SuppressWarnings("all")、@SuppressWarnings("unchecked")、@SuppressWarnings(value={"unchecked","deprecation"})等等。
//內置注解 public class Test01 {@Override//方法重寫的注解public String toString() {return super.toString();}@Deprecated//該注解注釋的方法不推薦程序員使用,但是可以用,或者存在其他更好的方式public static void test01(){System.out.println("這是測試");}@SuppressWarnings("all")//該注解注釋的方法、類中不會出現警告public void test02(){String a = "測試a";}public static void main(String[] args) {test01();//被@Deprecated注解的方法調用時會有刪除線,但是依然可以用。} }元注解:
元注解的作用就是負責注解其他注解,Java定義了4個標準的meta-annotation類型,他們被用來提供對其他annotation類型作說明。 這些類型和它們所支持的類在java.lang.annotation包中可以找到(@Target、@Retention、@Documented、@Inherited) @Target:用于描述注解的使用范圍(即:被描述的注解可以用在什么地方(類、方法、構造器等等)) @Target:注解的作用目標 @Target(ElementType.TYPE) //接口、類、枚舉 @Target(ElementType.FIELD) //字段、枚舉的常量 @Target(ElementType.METHOD) //方法 @Target(ElementType.PARAMETER) //方法參數 @Target(ElementType.CONSTRUCTOR) //構造函數 @Target(ElementType.LOCAL_VARIABLE)//局部變量 @Target(ElementType.ANNOTATION_TYPE)//注解 @Target(ElementType.PACKAGE) ///包? ? @Retention:表示需要在什么級別保存該注釋信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME)
@Retention:注解的保留位置 @Retention(RetentionPolicy.SOURCE) //注解僅存在于源碼中,在class字節碼文件中不包含 @Retention(RetentionPolicy.CLASS) // 默認的保留策略,注解會在class字節碼文件中存在,但運行時無法獲得, @Retention(RetentionPolicy.RUNTIME) // 注解會在class字節碼文件中存在,在運行時可以通過反射獲取到? ? @Document:說明該注解將被包含在javadoc中。
? ? @Inherited:說明子類可以繼承父類中的該注解。
import java.lang.annotation.*;//測試元注解 public class Test02 {@MyAnnotationpublic void test01(){} }//定義一個注解 //@Target表示注解可以用在什么地方,ElementType.METHOD表示可用在方法上,可以傳遞一個數組 @Target(value = {ElementType.METHOD, ElementType.TYPE}) //@Retention表示注解在什么地方才有效,一般都寫RetentionPolicy.RUNTIME,運行時都有效;RUNTIME>CLASS>SOURCE @Retention(value = RetentionPolicy.RUNTIME) //@Documented 表示是否將我們的注解生成在javaDOC中。 @Documented //@Inherited子類可以繼承父類的注解 @Inherited @interface MyAnnotation{ }自定義注解:
? ? 使用@interface自定義注解時,自動繼承了java.lang.annotation.Annotation接口。
?
分析:
? ? @interface用來聲明一個注解,格式:public @interface 注解明{定義內容}
? ? 其中的每一個方法實際上是聲明了一個配置參數。
? ? 方法的名稱就是參數的名稱。
? ? 返回值類型就是參數的類型(返回值只能是基本類型,Class,String。enum)。
? ? 可以通過default來聲明參數的默認值。
? ? 如果只有一個參數成員,一般參數名為value。
? ? 注解元素必須要有值,我們定義注解元素時,經常使用空字符串、0作為默認值。
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;//自定義注解 public class Test03 {//@MyAnno2(name = "奇怪的大冒險o") 注解可以顯式賦值,如果沒有默認值,必須給注解賦值@MyAnno2(name = "奇怪的大冒險o", schools = {"清華", "北大"})public void test1(){}@MyAnno3("測試")//如果參數為value的時候,可以省略valuepublic void test2(){} }@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface MyAnno2{//注解的參數,參數類型 參數名();String name() default "";int age() default 0;int id() default -1;//如果默認值為-1,代表不存在,就像indexof如果找不到就返回-1。String[] schools(); }@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface MyAnno3{//只有一個參數,建議用value命名String value() default ""; }?
總結
以上是生活随笔為你收集整理的spring框架注解多?注解到底是个什么东西?这篇文章给你讲明白的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构-队列详解(类C语言版)
- 下一篇: weblogic从入门到起飞!(webl