公眾號(hào):mywangxiao
及時(shí)發(fā)布考試資訊
分享考試技巧、復(fù)習(xí)經(jīng)驗(yàn)
新浪微博 @wangxiaocn關(guān)注微博
聯(lián)系方式 400-18-8000
Java技術(shù)自問(wèn)世時(shí)光已經(jīng)過(guò)去了9個(gè)年頭。作為一名一直關(guān)注其成長(zhǎng)的記者,曾經(jīng)一段時(shí)間有過(guò)這樣的想法:“Java技術(shù)已經(jīng)成熟,是不是發(fā)展速度該放慢一些了呢”。然而,這種想法錯(cuò)了。近來(lái)Java技術(shù)的進(jìn)化相當(dāng)顯著。Java技術(shù)正在迎來(lái)“又一次革命”的風(fēng)暴。這就是本文的結(jié)論。
“又一次”指的是什么?“革命”指的又是什么?光看結(jié)論的話肯定是一頭霧水。其實(shí),筆者要講的并不是變化這樣一個(gè)事實(shí),而是“促進(jìn)變化的原動(dòng)力”。是什么讓Java技術(shù)發(fā)生變化?讓我們從這一角度出發(fā),先看一下Java的變化歷程。
Java正處于轉(zhuǎn)變期
回顧Java技術(shù)的發(fā)展歷程,人們一定會(huì)感慨:2004年到2005年發(fā)生的變化如此之大,可以說(shuō)“現(xiàn)在”正是Java技術(shù)的轉(zhuǎn)換期。Java技術(shù)由編程語(yǔ)言(Java語(yǔ)言)、運(yùn)行環(huán)境(JVM:Java虛擬機(jī))、框架(JavaAPI群)組成,目前在每一個(gè)層面上都發(fā)生著巨大的變化。
(1)編程語(yǔ)言的變化
Java語(yǔ)言標(biāo)準(zhǔn)出現(xiàn)明顯變化。在2004年9月發(fā)布的正式版本 J2SE5.0(J2SE:Java2Platform,StandardEdition,Java技術(shù)的核心運(yùn)行環(huán)境)中,對(duì)Java語(yǔ)言標(biāo)準(zhǔn)中的 Generics與元數(shù)據(jù)進(jìn)行了大幅擴(kuò)展。出現(xiàn)了被認(rèn)為是“自Java問(wèn)世以來(lái)的最大一次語(yǔ)言標(biāo)準(zhǔn)變化”(美國(guó)SunMicrosystems)。這次語(yǔ)言標(biāo)準(zhǔn)的變化給許多JavaAPI帶來(lái)了影響。許多企業(yè)API的新版本都引入了基于元數(shù)據(jù)的注解(程序中記錄的附加信息),以較短的編碼記述更多的信息。
(2)Java運(yùn)行環(huán)境的變化
在J2SE5.0中,大幅度強(qiáng)化了JVM的管理功能與實(shí)用性,換句話說(shuō)就是具備了Java執(zhí)行OS(操作系統(tǒng))的特征。例如,原來(lái)在 J2EE(Java2Platform,EnterpriseEdition,構(gòu)筑企業(yè)系統(tǒng)的Java技術(shù))領(lǐng)域,標(biāo)準(zhǔn)配備有作為管理功能的應(yīng)用軟件管理框架JMX。不僅如此,還配備有JVM自身監(jiān)控功能((JSR174:MonitoringandManagementSpecificationfortheJavaVirtualMachine)。在標(biāo)準(zhǔn)功能架構(gòu)中可以實(shí)時(shí)監(jiān)視JVM運(yùn)行時(shí)的狀態(tài),也就是內(nèi)存使用量、線程狀態(tài)等。
J2SE5.0中新追加的功能中包括并行處理實(shí)用程序(JSR166),其基礎(chǔ)是紐約州立大學(xué)DougLea提供的程序庫(kù)。也就是說(shuō),標(biāo)準(zhǔn)規(guī)格中采用了來(lái)自民間的程序庫(kù)。
(3)框架的變化
值得注意的是,促成框架發(fā)生變化的正是來(lái)自民間的源碼開(kāi)放軟件。
對(duì)JSF產(chǎn)生影響的是作為源碼開(kāi)放的Web層框架得到普及的ApacheStruts。JSF是對(duì)Struts的思路進(jìn)行改進(jìn)的產(chǎn)物,JSF的SpecLead(規(guī)格制定領(lǐng)袖)之一CraigR.McClanahan就是Struts的作者。
對(duì)EJB3.0造成影響的也是民間源碼開(kāi)放軟件。EJB3.0引入了DI(DependencyInjection,依賴(lài)注入)容器類(lèi)(Container)與POJO(PlainOldJavaObject)持久類(lèi)這些新功能,大大減輕了編程的復(fù)雜性。這些概念因 PicoContainer、Spring等源碼開(kāi)放軟件的導(dǎo)入而引人注目。
其背景在于用戶(hù)對(duì)“目前的EJB過(guò)于復(fù)雜”的批評(píng)。原本由EJB反對(duì)派提出的設(shè)計(jì)思想與源碼開(kāi)放軟件,卻變成了EJB3.0的中心概念,顯出了巨大的影響力。
(4)腳本語(yǔ)言
在Java技術(shù)標(biāo)準(zhǔn)中新增加了編程語(yǔ)言Groovy(JSR241)。這是一種可與Java語(yǔ)言無(wú)縫連接的腳本語(yǔ)言,有望以極短的程序完成相關(guān)處理。 “在Java技術(shù)中添加Java以外的語(yǔ)言”,這聽(tīng)起來(lái)也許有些別扭,其實(shí)以前就有這樣的呼聲,希望將可以充分利用Java技術(shù)資源的腳本作為語(yǔ)言使用。 Groovy本來(lái)是源碼開(kāi)放軟件,最終得到認(rèn)可,被采納為標(biāo)準(zhǔn)規(guī)格。
由上述可以看出,Java技術(shù)的構(gòu)成要素正在發(fā)生巨大變化。就在不久以前,一提起服務(wù)器Java,“Servlet、JSP、EJB是重要的API”這樣的說(shuō)明還占主流,但現(xiàn)在基于JSF和EJB3.0的應(yīng)用程序已經(jīng)變成了 “面目全非”的程序。而在運(yùn)行短程序或測(cè)試時(shí),甚至還出現(xiàn)了不僅是Java語(yǔ)言,連腳本語(yǔ)言都開(kāi)始調(diào)用Java框架的情況。
這些變化從大的方面來(lái)看的話,可以說(shuō)是進(jìn)一步發(fā)揮了Java面向?qū)ο蟮膬?yōu)勢(shì)。當(dāng)然,也包括提高開(kāi)發(fā)效率、提高運(yùn)行穩(wěn)定性、簡(jiǎn)化運(yùn)行管理等業(yè)務(wù)上的優(yōu)勢(shì)。
開(kāi)發(fā)者團(tuán)體是真正的“變革推動(dòng)者”
那么,這些變化的原動(dòng)力來(lái)自哪里呢?為什么說(shuō)“目前”正面臨著“又一次變革”呢?理由如下:
在Java技術(shù)的發(fā)展過(guò)程中,1999年到2000年是一個(gè)大的轉(zhuǎn)折點(diǎn)。J2EE概念于1999年出現(xiàn)。J2EE也在隨后2~3年內(nèi)得到普及,但這一技術(shù)體系早在5年前就已經(jīng)確立。在我們眼前,新一代Java技術(shù)的輪廓正逐漸顯現(xiàn)出來(lái)。
JCP(JavaCommunityProcess)2.0于2000年問(wèn)世。以會(huì)員制的組織形式推進(jìn)Java技術(shù)的規(guī)格制訂、總體發(fā)展方向則以委員會(huì)的方式?jīng)Q定。從而形成了不依賴(lài)特定企業(yè)的規(guī)格制訂流程。這一組織形式歷經(jīng)近5年的時(shí)間,逐漸發(fā)展成“變革的推動(dòng)者”。
J2EE此前一直飽受批評(píng),認(rèn)為“Web層與EJB層的差距太大”、“EJB過(guò)于復(fù)雜”,但這也是因?yàn)檫@是一項(xiàng)實(shí)際使用的技術(shù)。JCP同樣也遇到很多批評(píng),稱(chēng)其“沒(méi)有完全公開(kāi)”、“制定的技術(shù)標(biāo)準(zhǔn)卻不可思議地讓Sun擁有知識(shí)產(chǎn)權(quán)”,但JCP卻作為一個(gè)團(tuán)體不斷發(fā)展壯大。
直接推動(dòng)Java技術(shù)變化的當(dāng)事者為5年前形成的基于團(tuán)體的標(biāo)準(zhǔn)制訂流程--JCP,但真正將討論與技術(shù)納入JCP的卻是包括Java技術(shù)批評(píng)者在內(nèi)的眾多Java開(kāi)發(fā)者團(tuán)體。他們也是早期開(kāi)展Java技術(shù)變革的先行者。由此誕生的下一代技術(shù)將會(huì)在2~3年后逐漸波及主流企業(yè)用戶(hù)。
Java技術(shù)的“變革推動(dòng)者”為開(kāi)發(fā)者團(tuán)體。不受制于特定企業(yè),通過(guò)眾多需要Java的開(kāi)發(fā)者的建議,Java技術(shù)正在不斷發(fā)展進(jìn)步。
編輯推薦:
JAVA認(rèn)證考試報(bào)考指南 / 更多JAVA考試經(jīng)驗(yàn)
(責(zé)任編輯:xy)