java注解的全面分析
全面解析java注解
Java中的常見注解
a.JDK中的注解
@Override 覆蓋父類或者父接口的方法
@Deprecated 表示方法已經(jīng)過時
@SuppressWarnings("deprecation") 忽略方法過時警告
b.常見的第三方注解
例如Spring中的@Autowired(自動注入)
注解的分類
a.按照運行機制分
1.源碼注解
注解只在源碼中存在,編譯成class文件就不存在了
2.編譯時注解
注解在源碼和class文件中都存在
eg:@Override、@Deprecated、@SuppressWarnings
3.運行時注解
在運行階段還起作用,甚至?xí)绊戇\行邏輯
eg:@Autowired
b.按照來源分
1.來自JDK的注解
2.來自第三方的注解
3.自定義注解
c.元注解:注解的注解
自定義注解
1.自定義注解的語法要求
import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface Description { String desc(); String author(); int age() default 18; }
注意:
- 使用@interface關(guān)鍵字定義注解
- 成員以無參無異常方式聲明
- 可以用default為成員指定一個默認值
- 成員類型是受限的,合法的類型包括原始類型以及String、Class、Annotation、Enumeration
- 如果注解只有一個成員,則成員名必須取名為value(),在使用時可以忽略成員名和賦值號(=)
- 注解類可以沒有成員,沒有成員的注解稱為標(biāo)識注解
2.元注解
a.@Target({ElementType.METHOD,ElementType.TYPE})
注解的作用域:
- ElementType.CONSTRUCTOR 構(gòu)造方法聲明
- ElementType.FIELD 字段聲明
- ElementType.LOCAL_VARIABLE 局部變量聲明
- ElementType.METHOD 方法聲明
- ElementType.PACKAGE 包聲明
- ElementType.PARAMETER 參數(shù)聲明
- ElementType.TYPE 類、接口
b.@Retention(RetentionPolicy.RUNTIME)
注解的生命周期:
- RetentionPolicy.SOURCE 只在源碼顯示,編譯時會丟棄
- RetentionPolicy.CLASS 編譯時會記錄到class中,運行時忽略
- RetentionPolicy.RUNTIME 運行時存在,可以通過反射讀取
c.@Inherited
標(biāo)識性的元注解:允許子類繼承
d.@Documented
生成javadoc時會包含注解
使用自定義注解
語法:@注解名(成員1=成員值1,成員2=成員值2)
@Description(desc="I am demo",author="boy",age=18) public void demo(){}
解析注解
概念:通過反射獲取類、函數(shù)或成員上的運行時注解信息,從而實現(xiàn)動態(tài)控制程序運行的邏輯
以上就是java 注解的實例詳解,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Spring Boot 中application.yml與bootstrap.yml的區(qū)別
其實yml和properties文件是一樣的原理,且一個項目上要么yml或者properties,二選一的存在。這篇文章給大家介紹了Spring Boot 中application.yml與bootstrap.yml的區(qū)別,感興趣的朋友一起看看吧2018-04-04Springboot如何實現(xiàn)對配置文件中的明文密碼加密
這篇文章主要介紹了Springboot如何實現(xiàn)對配置文件中的明文密碼加密問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12基于Java+SSM實現(xiàn)電影院購票系統(tǒng)
今天小編給大家?guī)硪豢頢SM的電影院售票系統(tǒng),非常不錯的一個項目,是學(xué)習(xí)?javaweb編程必備。文中的示例代碼講解詳細,需要的可以參考一下2022-04-04Java ArrayList如何實現(xiàn)生成不重復(fù)隨機數(shù)
這篇文章主要介紹了Java ArrayList如何實現(xiàn)生成不重復(fù)隨機數(shù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09Java利用數(shù)組隨機抽取幸運觀眾如何實現(xiàn)
這篇文章主要介紹了Java利用數(shù)組隨機抽取幸運觀眾如何實現(xiàn),需要的朋友可以參考下2014-02-02快速解決VS Code報錯:Java 11 or more recent is required to run. Ple
這篇文章主要介紹了快速解決VS Code報錯:Java 11 or more recent is required to run. Please download and install a recent JDK的相關(guān)資料,需要的朋友可以參考下2020-09-09解決使用stream將list轉(zhuǎn)map時,key重復(fù)導(dǎo)致報錯的問題
這篇文章主要介紹了解決使用stream將list轉(zhuǎn)map時,key重復(fù)導(dǎo)致報錯的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06使用MyBatis的動態(tài)SQL注解實現(xiàn)實體的CRUD操作代碼
在使用MyBatis進行數(shù)據(jù)庫操作時,動態(tài)SQL注解提供了一種優(yōu)雅的方式來編寫動態(tài)SQL語句,MyBatis?3.x?版本提供了下四個CRUD的高級注解,這些注解可以幫助開發(fā)者在Mapper接口中動態(tài)地構(gòu)建SQL語句,本文給大家介紹了使用MyBatis的動態(tài)SQL注解實現(xiàn)實體的CRUD操作2024-06-06靜態(tài)方法中調(diào)用Spring注入過程解析
這篇文章主要介紹了靜態(tài)方法中調(diào)用Spring注入過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11