天天看點

Spring注解原理學習-1

注解(Annotation)提供了一種安全的類似注釋的機制,為我們在代碼中添加資訊提供了一種形式化的方法,使我們可以在稍後某個時刻友善的使用這些資料(通過解析注解來使用這些資料),用來将任何的資訊或者中繼資料與程式元素(類、方法、成員變量等)進行關聯。其實就是更加直覺更加明了的說明,這些說明資訊與程式業務邏輯沒有關系,并且是供指定的工具或架構使用的。Annotation像一種修飾符一樣,應用于包、類型、構造方法、方法、成員變量、參數及本地變量的申明語句中。

Annotation其實是一種接口。通過java的反射機制相關的API來通路Annotation資訊。相關類(架構或工具中的類)根據這些資訊來決定如何使用該程式元素或改變它們的行為。[color=red]Java語言解釋器在工作時會忽略這些Annotation,是以在JVM中這些Annotation是“不起作用”的,隻能通過配套的工具才能對這些Annotation類型的資訊進行通路和處理。[/color]

Annotation和interface的異同:

1.Annotition的類型使用關鍵字[color=red]@interface[/color]而不是interface。它繼承了java.lang.annotition.Annotition接口,并非申明了一個interface。

2.Annotation類型、方法定義是獨特的、受限制的。[color=red]Annotation類型的方法必須申明為無參數、無異常抛出的。[/color]這些方法定義了Annotation的成員:方法名稱為了成員名,而方法傳回值稱為了成員的類型。而方法傳回值必須為primitive類型、Class類型、枚舉類型、Annotation類型或者由前面類型之一作為元素的一位數組。[color=red]方法的後面可以使用default和一個預設數值來申明成員的預設值,null不能作為成員的預設值,這與我們在非Annotation類型中定義方法有很大不同。[/color]Annotation類型和他的方法不能使用Annotation類型的參數,成員不能是generic。隻有傳回值類型是Class的方法可以在Annotation類型中使用generic,因為此方法能夠用類轉換将各種類型轉換為Class。

3.Annotation類型又與接口有着近似之處。它們可以定義常量、靜态成員類型(比如枚舉類型定義)。Annotation類型也可以如接口一般被實作或者繼承。

注解解析例子:

A.定義注解:

B.帶有注解的服務類

C.要注入的DAO

D.Xml代碼

E.注解處理器