1.Desktop類和(hé)SystemTray類
在JDK1.6中,AWT新增加了(le)兩個(gè)類:Desktop和(hα∑é)SystemTray.
前者可(kě)以用(yòng)來(lái)打開(kāi) ♣☆系統默認浏覽器(qì)浏覽指定的(de)URL,打開(k≠α÷φāi)系統默認郵件(jiàn)客戶端給指定₽±的(de)郵箱發郵件(jiàn),用(yòng)默認應用(yònφ ∏₩g)程序打開(kāi)或編輯文(wén)件(jiàn)(φπ§比如(rú),用(yòng)記事(shì)本打開(kāi)以txt為(w≈↓èi)後綴名的(de)文(wén)件(jià§©↓n)),用(yòng)系統默認的(de)打印機"<(jī)打印文(wén)檔;後者可(kě)以用☆Ω∞(yòng)來(lái)在系統托盤區(qū)創建一(yī)個(g★"è)托盤程序.
2.使用(yòng)JAXB2來(lái)實現(xi£≠àn)對(duì)象與XML之間(jiān)的(de)映射
JAXB是(shì)Java Architecture for XML £ Binding的(de)縮寫,可(kě)以将∑ε♥>一(yī)個(gè)Java對(duì)象轉變成為(★♥wèi)XML格式,反之亦然.
我們把對(duì)象與關系數(shù)據庫之間(πσ<jiān)的(de)映射稱為(wèi)ORM,∞Ω 其實也(yě)可(kě)以把對(duì)象與XML之間(jiān)λλ的(de)映射稱為(wèi)OXM(Objecδ'¶t XML Mapping).原來(lái)JAXB♥☆★是(shì)Java EE的(de)一(yī)部→♠π分(fēn),在JDK1.6中,SUN将其放( ☆fàng)到(dào)了(le)Java S∞÷λE中,這(zhè)也(yě)是(shì)SUN的(d£™≈e)一(yī)貫做(zuò)法.JDK1.6中自(zì)帶的♥λ÷←(de)這(zhè)個(gè)JAXB版本是(s↔™×hì)2.0,比起1.0(JSR 31)來(lái),JAXB2(JSR 2₹∏≥22)用(yòng)JDK5的(de)新特性Annotation來(✘₽€lái)标識要(yào)作(zuò)綁定的(de)類和(h $ é)屬性等,這(zhè)就(jiù)極大(dà)簡化(huà)了♦¶←(le)開(kāi)發的(de)工(gōng)作(zuò)量.實際上(αΩ↓shàng),在Java EE 5.0中,EJ←™≈B和(hé)Web Services也(yě)通✔≈(tōng)過Annotation來(lái)簡化(h' λβuà)開(kāi)發工(gōng)作(zuò).另外(wài),JA© XB2在底層是(shì)用(yòng)StAX(J≥§SR 173)來(lái)處理(lǐ)XML文(wén₹↕♣)檔.除了(le)JAXB之外(wài),我們還(hái)可(kě≤✘≤)以通(tōng)過XMLBeans和(hé)Castor等來(lái)實現₩"δ(xiàn)同樣的(de)功能(néng).
3.StAX
StAX(JSR 173)是(shì)JDK1.6.δ♥ ≥0中除了(le)DOM和(hé)SAX之外(w×✘ài)的(de)又(yòu)一(yī)種處理(lǐ)XML文≠∑(wén)檔的(de)API.
StAX 的(de)來(lái)曆:在JAXP1.3(JSR 2 ≥06)有(yǒu)兩種處理(lǐ)XML文( φwén)檔的(de)方法:DOM(Document Object Mod∞el)和(hé)SAX(Simple API for X↓≠ML).
JDK1.6.0中的(de)JAXB2(JS≥λ•¶R 222)和(hé)JAX-WS 2.0≠≤(JSR 224)都(dōu)會(huì)用(yòng)到(dào)S ₩tAXSun決定把StAX加入到(dào)JAXP家(jiā)族當中來(láiγ Ω),并将JAXP的(de)版本升級到(dào)1≤®∑★.4(JAXP1.4是(shì)JAXP1.♥★3的(de)維護版 本).JDK1.6裡(lǐ)面JAXP的(de)版 "本就(jiù)是(shì)1.4.
StAX是(shì)The Streaming APIλφ< for XML的(de)縮寫,一(yī☆'α)種利用(yòng)拉模式解析(pull-parsing)←↔←↓XML文(wén)檔的(de)API.StAX通(tōng)過提供λ一(yī)種基于事(shì)件(jiàn)叠代器(qì✔♥✘)(Iterator)的(de)API讓©α₹ 程序員(yuán)去(qù)控制(zhì)xml文(wén©>)檔解析過程,程序遍曆這(zhè)個(gè)事(shì★•σγ)件(jiàn)叠代器(qì)去(qù)處理(lǐ)每一(yī)個(gè)₩®•解析事(shì)件(jiàn),解析事(shì)件(jiàn£®)可(kě)以看(kàn)做(zuò)是πεγ(shì)程序拉出來(lái)的(de),也(yě)就(jiù)是(♣♦"₹shì)程序促使解析器(qì)産生(shēng)一(yī)個(g$♠↔è)解析事(shì)件(jiàn) 然後處理(lǐ)該事(s σεhì)件(jiàn),之後又(yòu)促使解析器(qì)産生(shēng)下≤≠•÷(xià)一(yī)個(gè)解析事(shì)件(jiàn),如(rú)此≈≠γ<循環直到(dào)碰到(dào)文(wén)檔結束符;
SAX也(yě)是(shì)基于事(shì)件(jià $n)處理(lǐ)xml文(wén)檔,但(dàn)卻&♣•是(shì)用(yòng)推模式解析,解析器(qì)解析完整個(gè)''xml文(wén)檔後,才産生(shēng)解&Ω®析事(shì)件(jiàn),然後推給程序去(qù)處理"≠(lǐ)這(zhè)些(xiē)事(shì)件(j∞iàn);DOM采 用(yòng)的(de)方式是(shì)将整個(gè)xm≈∑l文(wén)檔映射到(dào)一(yī)顆內(nèi)存樹(sε♠✔hù),這(zhè)樣就(jiù)可(kě)以很(hěn€→)容易地(dì)得(de)到(dào)父節點和(hé)子(zǐ)結點以及δ § 兄弟(dì)節點的(de)數(shù)據,但↕ ≠(dàn)如(rú)果文(wén)檔很(hěn)大(dà),将會←$(huì)嚴重影(yǐng)響性能(néng).
4.使用(yòng)Compiler API
現(xiàn)在我 們可(kě)以用(y₹>α↕òng)JDK1.6 的(de)Compile↓™$r API(JSR 199)去(qù)動态≤≈←≈編譯Java源文(wén)件(jiàn),Compi§'ler API結合反射功能(néng)就(jiù)可(k"&♠ě)以實現(xiàn)動态的(de)産生≈↑(shēng)Java代碼并編譯執行(xíng)這•∏ (zhè)些(xiē)代碼,有(yǒu)點動态語言的(de)特征.
這(zhè)個(gè)特性對(duì)于某些<±(xiē)需要(yào)用(yòng)到(dào)動态編譯的( ₹®↕de)應用(yòng)程序相(xiàng)當♦ε有(yǒu)用(yòng),比如(rú)σ♠JSP Web Server,當我們手動修改JSPε↑↕後,是(shì)不(bù)希望需要(yào)重啓↓π≈<Web Server才可(kě)以看(kàn)到(dào)效果的♠σ(de),這(zhè)時(shí)候我們就(jiù)可α(kě)以用(yòng)Compiler API來(lái)→✘♣實現(xiàn)動态編譯JSP文(wén)件(jià☆&γ↑n),當然,現(xiàn)在的(de)JSP Web Server也(yě)是 γ(shì)支持JSP熱(rè)部署的(d₹εδe),現(xiàn)在的(de)JSP Web Server通(tōng)過δ¥在運行(xíng)期間(jiān)通(tōng)過Runt¶φime.exec或ProcessBuilderε"®來(lái)調用(yòng)javac來(lái)編譯代✘✔↕碼,這(zhè)種方式需要(yào)我們産生(shēnδ↑'g)另一(yī)個(gè)進程去(qù) 做(zuò)編譯工(gōng)作&₩(zuò),不(bù)夠優雅容易使代碼依賴與特定的(de)操作(π★φzuò)系統;Compiler API通(tōng)過一(←→Ω∞yī)套易用(yòng)的(de)标準的(de)API提供↔'了(le)更加豐富的(de)方式去(qù)做(zuò)動态編譯,是(shΩ☆≤ì)跨平台的(de).
5.輕量級Http Server API
JDK1.6 提供了(le)一(yī)個(gè)簡單的(de)Http λ<Server API,據此我們可(kě)以構建自(zì♠✘)己的(de)嵌入式Http Server,它支持Http≥$£和(hé)Https協議(yì),提供了(le)HTTP1∑¶σ>.1的(de)部分(fēn)實現(xià ©γn),沒有(yǒu)被實現(xiàn)的(de)那(nà)部分(fβ&™≠ēn)可(kě)以通(tōng)過擴展已有(yǒu)的(de)↕↔Http Server API來(lái)實™♥€↕現(xiàn),程序員(yuán)自(zì)己實現(xiàn)HttpHand&→ler接口,HttpServer會(huì)÷✔☆¥調用(yòng)HttpHandler實現(xiàn)∏ππ∏類的(de)回調方法來(lái)處理(lǐ)客戶端請(qǐng)求,在這(z÷ hè) 裡(lǐ),我們把一(yī)個(gè)Http請(qǐng)求和(♦"hé)它的(de)響應稱為(wèi)一(yī)個(gè)交換↕£®,包裝成HttpExchange類,HttpServer≈£負責将HttpExchange傳給 Htt ≠pHandler實現(xiàn)類的(de)回調方法.
6.插入式注解處理(lǐ)API(Pluggable Annotation φ©εProcessing API)
插入式注解處理(lǐ)API(JSR 269)提供一(yī)套标✔✔≥準API來(lái)處理(lǐ)Annotations(JSR 175)
實際上(shàng)JSR 269不(bù)僅僅用(yòngΩש')來(lái)處理(lǐ)Annotat↑™εion,我覺得(de)更強大(dà)的(de)功能(néng☆•≠ )是(shì)它建立了(le)Java 語言本身(shēn)的(de)£÷<₹一(yī)個(gè)模型,它把method,λ₩Ωpackage,constructor,type,variδπable, enum,annotation等Java語言元素映射為(wè☆≤i)Types和(hé)Elements(兩者有(yǒu)什(s♣<•☆hén)麽區(qū)别?),從(cóng)而将Java語言的(de)語義映射成∞€Ω為(wèi)對(duì)象,我 們可(kě)以在javax.lang.mode ™l包下(xià)面可(kě)以看(kàn)到(±≠dào)這(zhè)些(xiē)類. 我們可(kě"$↕¶)以利用(yòng)JSR 269提供的(₹♥↕de)API來(lái)構建一(yī)個(gè)功能(néng↓φ$λ)豐富的(de)元編程(metaprogramming)環境.
JSR 269用(yòng)Annotatio"∏∏n Processor在編譯期間(jiān≥★$)而不(bù)是(shì)運行(xíng)期間(jiān)處理(lǐ)An↑↓λnotation,Annotation Processo★Ωr相(xiàng)當于編譯器(qì)的(de)一(yī)個(gè<φ₩)插件(jiàn),稱為(wèi)插入式注解處理(lǐ)↑↔✔.如(rú)果Annotation Process★€or處理(lǐ)Annotation時(shí)(執行(x★±α¶íng)process方法)産生(shēng)了(le)新的(de)Java代§λ↕碼,編譯器(qì)會(huì)再調用(yòng)一(yī)次Anno>πtation Processor,如(rú)果第二次處理(l♠÷§ǐ)還(hái)有(yǒu)新代碼産生(shēng)α↓,就(jiù)會(huì)接著(zhe)調用(±Ω↓←yòng)Annotation Proc§↕✘essor,直到(dào)沒有(yǒu)δΩΩ新代碼産生(shēng)為(wèi)止.每執行>α↔(xíng)一(yī)次process()方法被稱為(wèi)€✔£×一(yī)個(gè)"round",這(zhèπ )樣整個(gè)Annotation processing過程可(kě¶∑♠)以看(kàn)作(zuò)是(shì)一(yī)個(gèεγ×)round的(de)序列.
JSR 269主要(yào)被設計(jì)成為(wèi≥★ →)針對(duì)Tools或者容器(qì)的(de₽↓)API. 舉個(gè)例子(zǐ),我們想建立一(yī)套基于Annotatγφ♥ion的(de)單元測試框架(如(rú)TestNG↓≤®♦),在測試類裡(lǐ)面用(yòng)Annotation來(lái)标識 &∏測試期間(jiān)需要(yào)執行(xíng)的(de)測試方法.
7.用(yòng)Console開(kāi)發控制(zhì)台程序♥
JDK1.6中提供了(le)java.io.Co ♣nsole 類專用(yòng)來(lái)訪問(wèn)基于字符的(d¶σ★&e)控制(zhì)台設備.你(nǐ)的(de)程序如(σ<±rú)果要(yào)與Windows下(xià)的(de)cmd或者¶☆™ Linux下(xià)的(de)Terminal交互≠ ,就(jiù)可(kě)以用(yòng)Conso←€£×le類代勞. 但(dàn)我們不(bù)總是(shì♥↓)能(néng)得(de)到(dào)可(kě)用(yòng)的≥ε(de)Console,一(yī)個(gè)JVM是(sh ♥≠§ì)否有(yǒu)可(kě)用(yòng)的(de)Co§∞♣≥nsole依賴于底層平台和(hé)JVM如(rδ✘ú)何被調用(yòng).如(rú)果JVM是(shì)在交互式命令行(xγ≈'∑íng)(比如(rú) Windows的(de)cmd)中∞"¶啓動的(de),并且輸入輸出沒有(yǒu)重定向到(dào)另外(wàiε™☆→)的(de)地(dì)方,那(nà)麽就(ji≥® ù)可(kě)以得(de)到(dào)一(yī)個(gè)可(kě)用(yònΩ☆g)的(de)Console實例.
8.對(duì)腳本語言的(de)支持
如(rú): ruby,groovy,javascrip• ₹t
9.Common Annotations
Common annotations原本是(shì)↕☆Java EE 5.0(JSR 244)規範的±±♦←(de)一(yī)部分(fēn),現(xiàn)±<★在SUN把它的(de)一(yī)部分(fēn)放(fàng)到(dào)了(l λ↓e)Java SE 6.0中.
随著(zhe)Annotation元數(shù)據功能(néng)¶©β(JSR 175)加入到(dào)Java ✘☆→SE 5.0裡(lǐ)面,很(hěn)多(duō)Ja→∏≠va 技(jì)術(shù)(比如(rú)EJB,Web Servi±π∑ces)都(dōu)會(huì)用(yòn↕©g)Annotation部分(fēn)代替XML文(<•γwén)件(jiàn)來(lái)配置運行(xíng)參數(shù)(或者說(§©↓shuō)是(shì)支持聲明(míng)式編程,如(σ÷∞rú)EJB的(de)聲明(míng)式事(shì)務),如(rú)果這"♥✔(zhè)些(xiē)技(jì)術(shù)為(wèi₽$)通(tōng)用(yòng) 目的(de)都(dōu)單獨✘£Ω 定義了(le)自(zì)己的(de)Annotations,顯÷&₹然有(yǒu)點重複建設,,為(wèi)其他(tā)相(xiàng)關α ↑的(de)Java技(jì)術(shù)定義一(yī)套公共的(de) ♥ ♠Annotation是(shì)有(yǒu)價值的(de),可(kě)以避✔♦&<免 重複建設的(de)同時(shí),也(yě)保α•♣α證Java SE和(hé)Java EE 各種技(jì)術(shù© ✘)的(de)一(yī)緻性.
下(xià)面列舉出Common Annotations 1.0裡(lǐ)面的π©(de)10個(gè)Annotations Common AnnotaΩ✔tions Annotation Retention∞♥ Target Description Generate∑✘d Source ANNOTATION_Ω•≥TYPE,CONSTRUCTOR,FIELD$ λ,LOCAL_VARIABLE,METHOD,PACKAGE,PARAME ≥TER,TYPE 用(yòng)于标注生(shēng)成的(★ de)源代碼Resource Runtime TYPE,METHOD,FIλ'ELD用(yòng)于标注所依賴的(de)資源,容器(qì)據此注入外¶♣(wài)部資源依賴,有(yǒu)基于字段的(de)注入和(hé)基 ≥于setter方法的(de)注入兩種方式 Resources >'Runtime TYPE同時(shí)标注多(duō)個(gè)外(wα≥✘ài)部依賴,容器(qì)會(huì)把所有(yǒu)這✘&$(zhè)些(xiē)外(wài)部依賴注入PostConstruct π∑♦Runtime METHOD标注當容器(qì)注入所有(yǒu)依☆απ賴之後運行(xíng)的(de)方法,用(yòn"<₹g)來(lái)進行(xíng)依賴注入後的(¶♥ $de)初始化(huà)工(gōng)作(zuò),隻有(yǒu)一(yī)個÷ε(gè)方法可(kě)以标注為(wèi)Po£÷stConstruct PreDestroy Runtime "≠¥≥METHOD當對(duì)象實例将要(yào)¶≥被從(cóng)容器(qì)當中删掉之前₩ φ,要(yào)執行(xíng)的(de)回調方法要(↕¶δyào)标注為(wèi)PreDestroy RunAs ★δ&Runtime TYPE用(yòng)于标注用(yòng)什(shén)麽¥λ✘安全角色來(lái)執行(xíng)被标注↑ 類的(de)方法,這(zhè)個(gè)安全角色£∑↕和(hé)Container的(de)Security角色一(yī)緻的π♦(de).RolesAllowed Runtime TY↓≥PE,METHOD用(yòng)于标注允許執行(xíng)被标注類或方法的(d±β★e)安全角色,這(zhè)個(gè)安全角色和(& ♥hé)Container的(de)Security角×™π色一(yī)緻的(de)PermitAll Runt÷Ωime TYPE,METHOD允許所有(>≈yǒu)角色執行(xíng)被标注的(de)類或方法DenyAll Runti♦$δ↔me TYPE,METHOD不(bù)允許任何角色執行≤¥¥(xíng)被标注的(de)類或方法,表明(míng)該類£¶¶♣或方法不(bù)能(néng)在J
ava♣£ EE容器(qì)裡(lǐ)面運行(xín βg)DeclareRoles Runtime α♥₩TYPE用(yòng)來(lái)定義可(kě)以被應用(yòn★®÷g)程序檢驗的(de)安全角色,通(tōng)常用(yòng)isUserI★π¥✘nRole來(lái)檢驗安全角色.
10.JDK1.6中自(zì)帶了(le)webservice的(de®↓)功能(néng)
因為(wèi)集成了(le)JAX-WS,這(zhè)非常方便,不(bù)用(✘yòng)再用(yòng)第三方包來(lái)開(kāi)發了(le)。
|