何謂元數據

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配置文件作爲一個可選的重載機制,可以用於改變註釋的默認行爲。
發佈了42 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章