Posted on 2010-03-09 16:25
asdtiang 閱讀(325)
評論(0) 編輯 收藏 所屬分類:
JAVA
元數據是關于數據的數據。在編程語言上下文中,元數據是
添加到程序元素如方法、字段、類和包上的額外信息。
元數據的作用
-
一般來說,元數據可以用于創建文檔,跟蹤代碼中的依賴
性,執行編譯時檢查,代碼分析。
-
元數據還可用于協助程序元素與框架或者EJB、
EMF 和 TestNG這樣的工具之間的通信。EJB
3.0就廣泛地應用了Java元數據,通過元數據來實現聲明性請求企業服務,依賴性以及資源注入,消除了嚴格的EJB組件模型約束,并且取代了復雜的
XML配置文件。
-
元數據甚至使我們可以不用修改核心語言,就能夠在 Java
語言中添加新功能,使核心語言成為一種開放式語言。在純面向對象的語言中實現AOP就是使用元數據進行語言擴展的一個很好的例子。
AspectWerkz、JBoss AOP以及AspectJ5
使用元數據將類的語義轉換為一個aspect、將數據字段轉換為一個pointcut、將方法轉換為一個advice,等等。
Java平臺的元數據
Java 元數據(Annotation)是 J2SE 5.0
(研發歷時近三年,于2004年9月30日正式發布,代號為“Tiger”)新增加的功能之一,它在JSR-175規范中有詳細定義。該機制允許在
Java
代碼中添加自定義注釋,并允許通過反射(reflection),以編程方式訪問元數據注釋。通過提供為程序元素附加額外數據的標準方法,元數據功能具有
簡化和改進許多應用程序開發領域的潛在能力,其中包括配置管理、框架實現和代碼生成。
Annotation不直接影響程序的語義。然而,開發和部署工具可以讀取這些注釋,并以某種形式處理這些注釋,可能生成其他
Java源程序、XML配置文件或者要與包含注釋的程序一起使用的其他組件,從而影響運行狀態的程序的語義。注釋可以從源代碼中讀取,從編譯后
的.class文件中讀取,也可以通過反射機制在運行時讀取。
Annotation具有以下的一些特點:
- 元數據以標簽的形式存在于Java代碼中。
- 元
數據描述的信息是類型安全的,即元數據內部的字段都是有明確類型的。
- 元數據需要編譯器之外的工具額外的處理用來生成其它的程
序部件。
- 元數據可以只存在于Java源代碼級別,也可以存在于編譯之后的Class文件內部。
事實上,早在JDK5.0推出語言級的元數據機制Annotation以前,就一直存在對元數據的需求。但是由于沒有提供表達元數據
的標準機制,出現了各種解決方案。下面羅列了一些例子
- transient 關鍵字
- Serializable
標記接口
- xml 部署描述文件
- manifest.mf
文件
- Javadoc 標記(將文檔直接寫在源程序里,極大的方便了文檔的編寫)
- XDoclet(使
用類似于JavaDoc的語法撰寫描述信息,并使用工具生成描述文件)
這
些方法都存在一定的局限性,比如使用關鍵字不具有擴展性,用戶自定義新的關鍵字;標記接口沒有提供額外的信息,它們不能帶有參數,并且只能處理類,而不能
處理字段或方法或包。Javadoc和XDoclet標記不會被編譯器檢查。
最后,我們再詳細的對比一下Annotation和XML部署描述文件的優劣
- XML配置文件與代碼文件分離,不利于一致性維護,缺乏在運行時的反射機制。而Annotation與代碼一起被編譯器處理,并能夠
在運行時訪問。
- 通常XML配置文件都很復雜而且冗長,為了配置代碼,XML文
件必須復制許多信息:比如代碼中類名字和方法名字。Java注釋則不同,它是代碼的一部分,不需要額外的引用就可以指明配置信息。
- XML配置文件是文本文件,沒有顯式的類型支持,需要到運行時刻才能發現隱藏的錯誤。而
Annotation是類型安全的,它會被編譯器檢查。
- XML文件可以表達復雜的關系,但是在注釋中我們卻很難表達
復雜的或層次的結構。
- XML配置文件是在代碼之外被單獨處理的,也就是說基于XML的配置信息不是硬編碼的,可以部
署的時候進行修改。而修改Annotation則需要進行重新編譯,不過我們可以利用AOP提供的機制為已有的代碼添加Annotation。通過部署不
同的AOP模塊,就能使代碼具有不同的Annotation,但比起直接修改XML顯得復雜。
總
而言之,注釋是簡單易用的,并且對大多數應用來說已經足夠了。而XML文件更復雜,但具有部署的靈活性,因而被用來處理與部署相關的決策。注釋與XML配
置文件可以一起使用。由于注釋只能保存相當少的配置信息,只有預先集成的框架組件(類似在框架組件中已經完成了大多數預備工作)可以廣泛地把注釋作為配置
選項。而XML配置文件作為一個可選的重載機制,可以用于改變注釋的默認行為。
天蒼蒼,野茫茫,風吹草底見牛羊