框架基础——全面解析Java注解
閱讀目錄
- 一、概念
- 二、Java中的常見注解
- 三、注解的分類
- 四、自定義注解
- 五、注解的項(xiàng)目實(shí)戰(zhàn)
- 六、注解總結(jié)
為什么學(xué)習(xí)注解?
學(xué)習(xí)注解有什么好處?
學(xué)完能做什么?
答:1. 能夠讀懂別人寫的代碼,特別是框架相關(guān)的代碼;
2. 讓編程更加簡(jiǎn)潔,代碼更加清晰;
3. 讓別人高看一眼。
spring、mybatis使用了大量的注解,會(huì)用注解不是目的,會(huì)使用自定義注解才是亮點(diǎn)。
java注解在java1.5版本引入。
回到頂部
一、概念
Java提供了一種原程序中的元素關(guān)聯(lián)任何信息和任何元數(shù)據(jù)的途徑和方法。
回到頂部
二、Java中的常見注解
?1、JDK自帶注解
@Override 表示覆蓋或重寫父類的方法;
@Deprecated 表示該方法已經(jīng)過時(shí)了。(當(dāng)方法或是類上面有@Deprecated注解時(shí),說明該方法或是類都已經(jīng)過期不能再用,但不影響以前項(xiàng)目使用,提醒你新替代待的方法或是類。如果程序員不小心使用了它的元素,那么編譯器會(huì)發(fā)出警告信息。)
@SuppressWarnings 表示忽略指定警告,比如@Suppvisewarnings("Deprecation")
比如下面的例子:
person接口:
1 public interface Person { 2 public String name(); 3 4 public int age(); 5 6 /*@Deprecated 表示該方法已經(jīng)過時(shí)了*/ 7 @Deprecated 8 public void sing(); 9 /*注: 10 當(dāng)方法或是類上面有@Deprecated注解時(shí), 11 說明該方法或是類都已經(jīng)過期不能再用, 12 但不影響以前項(xiàng)目使用,提醒你新替代待的方法或是類 13 */ 14 }child實(shí)現(xiàn)類:
1 public class Child implements Person { 2 3 /*@Override 表示覆蓋或重寫父類的方法*/ 4 @Override 5 public String name() { 6 // TODO Auto-generated method stub 7 return null; 8 } 9 10 11 @Override 12 public int age() { 13 // TODO Auto-generated method stub 14 return 0; 15 } 16 17 18 @Override 19 public void sing() { 20 // TODO Auto-generated method stub 21 22 }測(cè)試類:
1 public class Test { 2 /*@SuppressWarnings 表示忽略指定警告,比如@Suppvisewarnings("Deprecation")*/ 3 @SuppressWarnings("deprecation") 4 public void sing(){ 5 Person p=new Child(); 6 7 p.sing(); 8 } 9 10 }?2、第三方注解
具體示例如下:
Autowired將成員變量自動(dòng)注入進(jìn)來
回到頂部
三、注解的分類
按運(yùn)行機(jī)制(注解存在于程序的那個(gè)階段)將注解分為三類:源碼注解(只在源碼存在)、編譯注解(在class文件中也存在)、運(yùn)行時(shí)注解(在運(yùn)行階段仍然起作用)
按照來源來分的話,有如下三類:
1:JDK自帶的注解(Java目前只內(nèi)置了三種標(biāo)準(zhǔn)注解:@Override、@Deprecated、@SuppressWarnings,以及四種元注解:@Target、@Retention、@Documented、@Inherited)
2:第三方的注解——這一類注解是我們接觸最多和作用最大的一類
3:自定義注解——也可以看作是我們編寫的注解,其他的都是他人編寫注解
?
按照功能來分的,還有,元注解——注解的注解。
回到頂部
四、自定義注解
?1、自定義注解的語法要求
?2、元注解
現(xiàn)在逐行分析:
@Target 是注解的作用域?:表示該注解可以用于一個(gè)類中的那些屬性及方法上,如果作用域類型有多個(gè)用英文逗號(hào)分隔
下面是注解的作用域的列表:
@Retention:表示該注解的生命周期
注解按聲明周期有個(gè)分類:
@Inherited:此注解是標(biāo)識(shí)性的元注解,表示當(dāng)前注解可以由子注解來繼承
@Documented:表示生成javadoc的時(shí)候會(huì)包含注解
?3、使用自定義注解
示例:
注解的定義看起來很像接口的定義,事實(shí)上,與其他任何Java接口一樣,注解也將會(huì)編譯成class文件。
定義注解時(shí),會(huì)需要一些元注解(meta-annotation),如@Target和@Retention。@Target用來定義你的注解將用于什么地方(例如是一個(gè)方法或一個(gè)域)。@Retention用來定義該注解在哪一個(gè)級(jí)別可用,在源代碼(SOURCE)、類文件中(CLASS)或者運(yùn)行時(shí)(RUNTIME)。
? 4、解析注解
概念:通過反射獲取類、函數(shù)或成員上運(yùn)行時(shí)注解信息,從而實(shí)現(xiàn)動(dòng)態(tài)控制程序運(yùn)行的邏輯。
如:
使用forName()方法加載類,并使用getAnnotation(Description.class)檢查該類是否帶有@Description注解。
注解的繼承只能作用在類上,方法上的注解不會(huì)被繼承,Interface中的所有注解不會(huì)被繼承。
回到頂部
五、注解的項(xiàng)目實(shí)戰(zhàn)
具體示例:
Test測(cè)試類:
首先,考慮代碼如何與數(shù)據(jù)庫進(jìn)行映射。
上面的Filter類與數(shù)據(jù)庫表的結(jié)構(gòu)非常相似。
對(duì)注解@Table 和@Column進(jìn)行定義:
接下來考慮query()方法的實(shí)現(xiàn):
運(yùn)行結(jié)果:
?
此時(shí)需要對(duì)4.3部分改善一下:
?
運(yùn)行結(jié)果:
改善后:
此時(shí)運(yùn)行結(jié)果:
以上就基本完成了需求。
回到頂部
六、注解總結(jié)
看我們都學(xué)會(huì)了啥?
?
?
-------------我是低調(diào)的分割線--------------------------
總結(jié)
以上是生活随笔為你收集整理的框架基础——全面解析Java注解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美联储无限印钞终于尝到恶果,美元创10年
- 下一篇: 民生银行信用卡怎么绑定huawei pa