爲何學習註解?java
學習註解有什麼好處?程序員
學完能作什麼?spring
答:1. 可以讀懂別人寫的代碼,特別是框架相關的代碼;數據庫
2. 讓編程更加簡潔,代碼更加清晰;編程
3. 讓別人高看一眼。mybatis
spring、mybatis使用了大量的註解,會用註解不是目的,會使用自定義註解纔是亮點。框架
java註解在java1.5版本引入。ide
Java提供了一種原程序中的元素關聯任何信息和任何元數據的途徑和方法。函數
@Override 表示覆蓋或重寫父類的方法;學習
@Deprecated 表示該方法已通過時了。(當方法或是類上面有@Deprecated註解時,說明該方法或是類都已通過期不能再用,但不影響之前項目使用,提醒你新替代待的方法或是類。若是程序員不當心使用了它的元素,那麼編譯器會發出警告信息。)
@SuppressWarnings 表示忽略指定警告,好比@Suppvisewarnings("Deprecation")
好比下面的例子:
person接口:
1 public interface Person { 2 public String name(); 3 4 public int age(); 5 6 /*@Deprecated 表示該方法已通過時了*/ 7 @Deprecated 8 public void sing(); 9 /*注: 10 當方法或是類上面有@Deprecated註解時, 11 說明該方法或是類都已通過期不能再用, 12 但不影響之前項目使用,提醒你新替代待的方法或是類 13 */ 14 }
child實現類:
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 }
測試類:
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 }
具體示例以下:
Autowired將成員變量自動注入進來
按運行機制(註解存在於程序的那個階段)將註解分爲三類:源碼註解(只在源碼存在)、編譯註解(在class文件中也存在)、運行時註解(在運行階段仍然起做用)
按照來源來分的話,有以下三類:
1:JDK自帶的註解(Java目前只內置了三種標準註解:@Override、@Deprecated、@SuppressWarnings,以及四種元註解:@Target、@Retention、@Documented、@Inherited)
2:第三方的註解——這一類註解是咱們接觸最多和做用最大的一類
3:自定義註解——也能夠看做是咱們編寫的註解,其餘的都是他人編寫註解
按照功能來分的,還有,元註解——註解的註解。
如今逐行分析:
@Target 是註解的做用域 :表示該註解能夠用於一個類中的那些屬性及方法上,若是做用域類型有多個用英文逗號分隔
下面是註解的做用域的列表:
@Retention:表示該註解的生命週期
註解按聲明週期有個分類:
@Inherited:此註解是標識性的元註解,表示當前註解能夠由子註解來繼承
@Documented:表示生成javadoc的時候會包含註解
示例:
註解的定義看起來很像接口的定義,事實上,與其餘任何Java接口同樣,註解也將會編譯成class文件。
定義註解時,會須要一些元註解(meta-annotation),如@Target和@Retention。@Target用來定義你的註解將用於什麼地方(例如是一個方法或一個域)。@Retention用來定義該註解在哪個級別可用,在源代碼(SOURCE)、類文件中(CLASS)或者運行時(RUNTIME)。
概念:經過反射獲取類、函數或成員上運行時註解信息,從而實現動態控制程序運行的邏輯。
如:
使用forName()方法加載類,並使用getAnnotation(Description.class)檢查該類是否帶有@Description註解。
註解的繼承只能做用在類上,方法上的註解不會被繼承,Interface中的全部註解不會被繼承。
具體示例:
Test測試類:
首先,考慮代碼如何與數據庫進行映射。
上面的Filter類與數據庫表的結構很是類似。
對註解@Table 和@Column進行定義:
接下來考慮query()方法的實現:
運行結果:
此時須要對4.3部分改善一下:
運行結果:
改善後:
此時運行結果:
以上就基本完成了需求。
看咱們都學會了啥?