日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

spring框架注解多?注解到底是个什么东西?这篇文章给你讲明白

發(fā)布時(shí)間:2025/3/19 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring框架注解多?注解到底是个什么东西?这篇文章给你讲明白 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

什么是注解

內(nèi)置注解:

元注解:

自定義注解:


什么是注解

1.Annotation是從JDK5.0開(kāi)始引入的新技術(shù)。 Annotation的作用: 2.不是程序本身,可以對(duì)程序作出解釋。(這一點(diǎn)和注釋(comment)沒(méi)什么區(qū)別) 3.可以被其他程序(比如編譯器等)讀取。 Annotation的格式: 4.注解是以“@注釋名”在代碼中存在的,還可以 添加一些參數(shù)值,例如@SuppressWarnings(value="unchecked"). Annotation在哪里使用: 5.可以附加在package、class、method、field等上面,相當(dāng)于給他們添加了額外的輔助信息,我們可以通過(guò)反射機(jī)制編程實(shí)現(xiàn)對(duì)這些元數(shù)據(jù)的訪問(wèn)。

內(nèi)置注解:

?? ?@Override:定義在java.lang.Override中,此注釋只適用于修辭方法,表示一個(gè)方法聲明打算重寫(xiě)超類中的另一個(gè)方法聲明。

?? ?@Deprecated:定義在java.lang.Deprecated中,此注釋可以用于修辭方法,屬性,類,表示不鼓勵(lì)程序員使用這樣的元素,通常是因?yàn)樗芪kU(xiǎn)或者存在更好的選擇。

?? ?@SuppressWarnings:定義在java.lang.SuppressWarnings中,用來(lái)抑制編譯時(shí)的警告信息,與前兩個(gè)注釋有所不同,你需要添加一個(gè)參數(shù)才能正確使用,這些參數(shù)都是已經(jīng)定義好的:@SuppressWarnings("all")、@SuppressWarnings("unchecked")、@SuppressWarnings(value={"unchecked","deprecation"})等等。

//內(nèi)置注解 public class Test01 {@Override//方法重寫(xiě)的注解public String toString() {return super.toString();}@Deprecated//該注解注釋的方法不推薦程序員使用,但是可以用,或者存在其他更好的方式public static void test01(){System.out.println("這是測(cè)試");}@SuppressWarnings("all")//該注解注釋的方法、類中不會(huì)出現(xiàn)警告public void test02(){String a = "測(cè)試a";}public static void main(String[] args) {test01();//被@Deprecated注解的方法調(diào)用時(shí)會(huì)有刪除線,但是依然可以用。} }

元注解:

元注解的作用就是負(fù)責(zé)注解其他注解,Java定義了4個(gè)標(biāo)準(zhǔn)的meta-annotation類型,他們被用來(lái)提供對(duì)其他annotation類型作說(shuō)明。 這些類型和它們所支持的類在java.lang.annotation包中可以找到(@Target、@Retention、@Documented、@Inherited) @Target:用于描述注解的使用范圍(即:被描述的注解可以用在什么地方(類、方法、構(gòu)造器等等)) @Target:注解的作用目標(biāo) @Target(ElementType.TYPE) //接口、類、枚舉 @Target(ElementType.FIELD) //字段、枚舉的常量 @Target(ElementType.METHOD) //方法 @Target(ElementType.PARAMETER) //方法參數(shù) @Target(ElementType.CONSTRUCTOR) //構(gòu)造函數(shù) @Target(ElementType.LOCAL_VARIABLE)//局部變量 @Target(ElementType.ANNOTATION_TYPE)//注解 @Target(ElementType.PACKAGE) ///包

? ? @Retention:表示需要在什么級(jí)別保存該注釋信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME)

@Retention:注解的保留位置          @Retention(RetentionPolicy.SOURCE) //注解僅存在于源碼中,在class字節(jié)碼文件中不包含 @Retention(RetentionPolicy.CLASS) // 默認(rèn)的保留策略,注解會(huì)在class字節(jié)碼文件中存在,但運(yùn)行時(shí)無(wú)法獲得, @Retention(RetentionPolicy.RUNTIME) // 注解會(huì)在class字節(jié)碼文件中存在,在運(yùn)行時(shí)可以通過(guò)反射獲取到

? ? @Document:說(shuō)明該注解將被包含在javadoc中。

? ? @Inherited:說(shuō)明子類可以繼承父類中的該注解。

import java.lang.annotation.*;//測(cè)試元注解 public class Test02 {@MyAnnotationpublic void test01(){} }//定義一個(gè)注解 //@Target表示注解可以用在什么地方,ElementType.METHOD表示可用在方法上,可以傳遞一個(gè)數(shù)組 @Target(value = {ElementType.METHOD, ElementType.TYPE}) //@Retention表示注解在什么地方才有效,一般都寫(xiě)RetentionPolicy.RUNTIME,運(yùn)行時(shí)都有效;RUNTIME>CLASS>SOURCE @Retention(value = RetentionPolicy.RUNTIME) //@Documented 表示是否將我們的注解生成在javaDOC中。 @Documented //@Inherited子類可以繼承父類的注解 @Inherited @interface MyAnnotation{ }

自定義注解:

? ? 使用@interface自定義注解時(shí),自動(dòng)繼承了java.lang.annotation.Annotation接口。

?

分析:

? ? @interface用來(lái)聲明一個(gè)注解,格式:public @interface 注解明{定義內(nèi)容}

? ? 其中的每一個(gè)方法實(shí)際上是聲明了一個(gè)配置參數(shù)。

? ? 方法的名稱就是參數(shù)的名稱。

? ? 返回值類型就是參數(shù)的類型(返回值只能是基本類型,Class,String。enum)。

? ? 可以通過(guò)default來(lái)聲明參數(shù)的默認(rèn)值。

? ? 如果只有一個(gè)參數(shù)成員,一般參數(shù)名為value。

? ? 注解元素必須要有值,我們定義注解元素時(shí),經(jīng)常使用空字符串、0作為默認(rèn)值。

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 = "奇怪的大冒險(xiǎn)o") 注解可以顯式賦值,如果沒(méi)有默認(rèn)值,必須給注解賦值@MyAnno2(name = "奇怪的大冒險(xiǎn)o", schools = {"清華", "北大"})public void test1(){}@MyAnno3("測(cè)試")//如果參數(shù)為value的時(shí)候,可以省略valuepublic void test2(){} }@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface MyAnno2{//注解的參數(shù),參數(shù)類型 參數(shù)名();String name() default "";int age() default 0;int id() default -1;//如果默認(rèn)值為-1,代表不存在,就像indexof如果找不到就返回-1。String[] schools(); }@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @interface MyAnno3{//只有一個(gè)參數(shù),建議用value命名String value() default ""; }

?

總結(jié)

以上是生活随笔為你收集整理的spring框架注解多?注解到底是个什么东西?这篇文章给你讲明白的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。