asdtiang的博客 感謝blogjava提供的博客交流平臺(tái)
          元數(shù)據(jù)是關(guān)于數(shù)據(jù)的數(shù)據(jù)。在編程語(yǔ)言上下文中,元數(shù)據(jù)是 添加到程序元素如方法、字段、類(lèi)和包上的額外信息。
          元數(shù)據(jù)的作用
          •  一般來(lái)說(shuō),元數(shù)據(jù)可以用于創(chuàng)建文檔,跟蹤代碼中的依賴(lài) 性,執(zhí)行編譯時(shí)檢查,代碼分析。
          • 元數(shù)據(jù)還可用于協(xié)助程序元素與框架或者EJB、 EMF 和 TestNG這樣的工具之間的通信。EJB 3.0就廣泛地應(yīng)用了Java元數(shù)據(jù),通過(guò)元數(shù)據(jù)來(lái)實(shí)現(xiàn)聲明性請(qǐng)求企業(yè)服務(wù),依賴(lài)性以及資源注入,消除了嚴(yán)格的EJB組件模型約束,并且取代了復(fù)雜的 XML配置文件。
          • 元數(shù)據(jù)甚至使我們可以不用修改核心語(yǔ)言,就能夠在 Java 語(yǔ)言中添加新功能,使核心語(yǔ)言成為一種開(kāi)放式語(yǔ)言。在純面向?qū)ο蟮恼Z(yǔ)言中實(shí)現(xiàn)AOP就是使用元數(shù)據(jù)進(jìn)行語(yǔ)言擴(kuò)展的一個(gè)很好的例子。 AspectWerkz、JBoss AOP以及AspectJ5 使用元數(shù)據(jù)將類(lèi)的語(yǔ)義轉(zhuǎn)換為一個(gè)aspect、將數(shù)據(jù)字段轉(zhuǎn)換為一個(gè)pointcut、將方法轉(zhuǎn)換為一個(gè)advice,等等。
          Java平臺(tái)的元數(shù)據(jù)
          Java 元數(shù)據(jù)(Annotation)是 J2SE 5.0 (研發(fā)歷時(shí)近三年,于2004年9月30日正式發(fā)布,代號(hào)為“Tiger”)新增加的功能之一,它在JSR-175規(guī)范中有詳細(xì)定義。該機(jī)制允許在 Java 代碼中添加自定義注釋?zhuān)⒃试S通過(guò)反射(reflection),以編程方式訪問(wèn)元數(shù)據(jù)注釋。通過(guò)提供為程序元素附加額外數(shù)據(jù)的標(biāo)準(zhǔn)方法,元數(shù)據(jù)功能具有 簡(jiǎn)化和改進(jìn)許多應(yīng)用程序開(kāi)發(fā)領(lǐng)域的潛在能力,其中包括配置管理、框架實(shí)現(xiàn)和代碼生成。
           
          Annotation不直接影響程序的語(yǔ)義。然而,開(kāi)發(fā)和部署工具可以讀取這些注釋?zhuān)⒁阅撤N形式處理這些注釋?zhuān)赡苌善渌? Java源程序、XML配置文件或者要與包含注釋的程序一起使用的其他組件,從而影響運(yùn)行狀態(tài)的程序的語(yǔ)義。注釋可以從源代碼中讀取,從編譯后 的.class文件中讀取,也可以通過(guò)反射機(jī)制在運(yùn)行時(shí)讀取。
           
          Annotation具有以下的一些特點(diǎn):
          •  元數(shù)據(jù)以標(biāo)簽的形式存在于Java代碼中。 
          •  元 數(shù)據(jù)描述的信息是類(lèi)型安全的,即元數(shù)據(jù)內(nèi)部的字段都是有明確類(lèi)型的。 
          •  元數(shù)據(jù)需要編譯器之外的工具額外的處理用來(lái)生成其它的程 序部件。 
          •  元數(shù)據(jù)可以只存在于Java源代碼級(jí)別,也可以存在于編譯之后的Class文件內(nèi)部。
          事實(shí)上,早在JDK5.0推出語(yǔ)言級(jí)的元數(shù)據(jù)機(jī)制Annotation以前,就一直存在對(duì)元數(shù)據(jù)的需求。但是由于沒(méi)有提供表達(dá)元數(shù)據(jù) 的標(biāo)準(zhǔn)機(jī)制,出現(xiàn)了各種解決方案。下面羅列了一些例子
          •  transient 關(guān)鍵字 
          •  Serializable 標(biāo)記接口
          •  xml 部署描述文件 
          • manifest.mf 文件    
          • Javadoc 標(biāo)記(將文檔直接寫(xiě)在源程序里,極大的方便了文檔的編寫(xiě))
          •  XDoclet(使 用類(lèi)似于JavaDoc的語(yǔ)法撰寫(xiě)描述信息,并使用工具生成描述文件)
          這 些方法都存在一定的局限性,比如使用關(guān)鍵字不具有擴(kuò)展性,用戶(hù)自定義新的關(guān)鍵字;標(biāo)記接口沒(méi)有提供額外的信息,它們不能帶有參數(shù),并且只能處理類(lèi),而不能 處理字段或方法或包。Javadoc和XDoclet標(biāo)記不會(huì)被編譯器檢查。
           
          最后,我們?cè)僭敿?xì)的對(duì)比一下Annotation和XML部署描述文件的優(yōu)劣
          • XML配置文件與代碼文件分離,不利于一致性維護(hù),缺乏在運(yùn)行時(shí)的反射機(jī)制。而Annotation與代碼一起被編譯器處理,并能夠 在運(yùn)行時(shí)訪問(wèn)。
          • 通常XML配置文件都很復(fù)雜而且冗長(zhǎng),為了配置代碼,XML文 件必須復(fù)制許多信息:比如代碼中類(lèi)名字和方法名字。Java注釋則不同,它是代碼的一部分,不需要額外的引用就可以指明配置信息。
          • XML配置文件是文本文件,沒(méi)有顯式的類(lèi)型支持,需要到運(yùn)行時(shí)刻才能發(fā)現(xiàn)隱藏的錯(cuò)誤。而 Annotation是類(lèi)型安全的,它會(huì)被編譯器檢查。  
          • XML文件可以表達(dá)復(fù)雜的關(guān)系,但是在注釋中我們卻很難表達(dá) 復(fù)雜的或?qū)哟蔚慕Y(jié)構(gòu)。
          •  XML配置文件是在代碼之外被單獨(dú)處理的,也就是說(shuō)基于XML的配置信息不是硬編碼的,可以部 署的時(shí)候進(jìn)行修改。而修改Annotation則需要進(jìn)行重新編譯,不過(guò)我們可以利用AOP提供的機(jī)制為已有的代碼添加Annotation。通過(guò)部署不 同的AOP模塊,就能使代碼具有不同的Annotation,但比起直接修改XML顯得復(fù)雜。
          總 而言之,注釋是簡(jiǎn)單易用的,并且對(duì)大多數(shù)應(yīng)用來(lái)說(shuō)已經(jīng)足夠了。而XML文件更復(fù)雜,但具有部署的靈活性,因而被用來(lái)處理與部署相關(guān)的決策。注釋與XML配 置文件可以一起使用。由于注釋只能保存相當(dāng)少的配置信息,只有預(yù)先集成的框架組件(類(lèi)似在框架組件中已經(jīng)完成了大多數(shù)預(yù)備工作)可以廣泛地把注釋作為配置 選項(xiàng)。而XML配置文件作為一個(gè)可選的重載機(jī)制,可以用于改變注釋的默認(rèn)行為。

          天蒼蒼,野茫茫,風(fēng)吹草底見(jiàn)牛羊

          posts - 80, comments - 24, trackbacks - 0, articles - 32

          Copyright © asdtiang

          asdtiang的博客 PaidMailz
          點(diǎn)擊廣告網(wǎng)賺A(每天4個(gè)廣告,每個(gè)0.0025美元,一個(gè)搜索廣告0.03美元)
          主站蜘蛛池模板: 鲁甸县| 台州市| 湘阴县| 包头市| 黑山县| 旌德县| 孝感市| 陈巴尔虎旗| 正蓝旗| 南靖县| 荔浦县| 濮阳市| 新蔡县| 东阿县| 当阳市| 无为县| 友谊县| 柳林县| 静乐县| 龙山县| 肥乡县| 汉阴县| 盐源县| 武宣县| 安吉县| 承德市| 简阳市| 石狮市| 新平| 百色市| 武鸣县| 曲麻莱县| 石台县| 砚山县| 成安县| 金乡县| 和平区| 多伦县| 河北省| 绩溪县| 绥化市|