1.Desktop類和(hé)SystemTray類
在JDK1.6中,AWT新增加了(le)兩個(gè)類:Desktop和(hé)SystemTray.
前者可(kě)以用(yòng)來(lái)打開系統默認浏覽器浏覽指定的(de)URL,打開系統默認郵件客戶端給指定的(de)郵箱發郵件,用(yòng)默認應用(yòng)程序打開或編輯文件(比如,用(yòng)記事本打開以txt爲後綴名的(de)文件),用(yòng)系統默認的(de)打印機打印文檔;後者可(kě)以用(yòng)來(lái)在系統托盤區(qū)創建一個(gè)托盤程序.
2.使用(yòng)JAXB2來(lái)實現對(duì)象與XML之間的(de)映射
JAXB是Java Architecture for XML Binding的(de)縮寫,可(kě)以将一個(gè)Java對(duì)象轉變成爲XML格式,反之亦然.
我們把對(duì)象與關系數據庫之間的(de)映射稱爲ORM,其實也(yě)可(kě)以把對(duì)象與XML之間的(de)映射稱爲OXM(Object XML Mapping).原來(lái)JAXB是Java EE的(de)一部分(fēn),在JDK1.6中,SUN将其放到了(le)Java SE中,這(zhè)也(yě)是SUN的(de)一貫做(zuò)法.JDK1.6中自帶的(de)這(zhè)個(gè)JAXB版本是2.0,比起1.0(JSR 31)來(lái),JAXB2(JSR 222)用(yòng)JDK5的(de)新特性Annotation來(lái)标識要作綁定的(de)類和(hé)屬性等,這(zhè)就極大(dà)簡化(huà)了(le)開發的(de)工作量.實際上,在Java EE 5.0中,EJB和(hé)Web Services也(yě)通(tōng)過Annotation來(lái)簡化(huà)開發工作.另外,JAXB2在底層是用(yòng)StAX(JSR 173)來(lái)處理(lǐ)XML文檔.除了(le)JAXB之外,我們還(hái)可(kě)以通(tōng)過XMLBeans和(hé)Castor等來(lái)實現同樣的(de)功能.
3.StAX
StAX(JSR 173)是JDK1.6.0中除了(le)DOM和(hé)SAX之外的(de)又一種處理(lǐ)XML文檔的(de)API.
StAX 的(de)來(lái)曆:在JAXP1.3(JSR 206)有兩種處理(lǐ)XML文檔的(de)方法:DOM(Document Object Model)和(hé)SAX(Simple API for XML).
JDK1.6.0中的(de)JAXB2(JSR 222)和(hé)JAX-WS 2.0(JSR 224)都會用(yòng)到StAXSun決定把StAX加入到JAXP家族當中來(lái),并将JAXP的(de)版本升級到1.4(JAXP1.4是JAXP1.3的(de)維護版 本).JDK1.6裏面JAXP的(de)版本就是1.4.
StAX是The Streaming API for XML的(de)縮寫,一種利用(yòng)拉模式解析(pull-parsing)XML文檔的(de)API.StAX通(tōng)過提供一種基于事件叠代器(Iterator)的(de)API讓 程序員(yuán)去控制xml文檔解析過程,程序遍曆這(zhè)個(gè)事件叠代器去處理(lǐ)每一個(gè)解析事件,解析事件可(kě)以看做(zuò)是程序拉出來(lái)的(de),也(yě)就是程序促使解析器産生一個(gè)解析事件 然後處理(lǐ)該事件,之後又促使解析器産生下(xià)一個(gè)解析事件,如此循環直到碰到文檔結束符;
SAX也(yě)是基于事件處理(lǐ)xml文檔,但卻是用(yòng)推模式解析,解析器解析完整個(gè)xml文檔後,才産生解析事件,然後推給程序去處理(lǐ)這(zhè)些事件;DOM采 用(yòng)的(de)方式是将整個(gè)xml文檔映射到一顆内存樹,這(zhè)樣就可(kě)以很容易地得(de)到父節點和(hé)子結點以及兄弟(dì)節點的(de)數據,但如果文檔很大(dà),将會嚴重影(yǐng)響性能.
4.使用(yòng)Compiler API
現在我 們可(kě)以用(yòng)JDK1.6 的(de)Compiler API(JSR 199)去動态編譯Java源文件,Compiler API結合反射功能就可(kě)以實現動态的(de)産生Java代碼并編譯執行這(zhè)些代碼,有點動态語言的(de)特征.
這(zhè)個(gè)特性對(duì)于某些需要用(yòng)到動态編譯的(de)應用(yòng)程序相當有用(yòng),比如JSP Web Server,當我們手動修改JSP後,是不希望需要重啓Web Server才可(kě)以看到效果的(de),這(zhè)時(shí)候我們就可(kě)以用(yòng)Compiler API來(lái)實現動态編譯JSP文件,當然,現在的(de)JSP Web Server也(yě)是支持JSP熱(rè)部署的(de),現在的(de)JSP Web Server通(tōng)過在運行期間通(tōng)過Runtime.exec或ProcessBuilder來(lái)調用(yòng)javac來(lái)編譯代碼,這(zhè)種方式需要我們産生另一個(gè)進程去 做(zuò)編譯工作,不夠優雅容易使代碼依賴與特定的(de)操作系統;Compiler API通(tōng)過一套易用(yòng)的(de)标準的(de)API提供了(le)更加豐富的(de)方式去做(zuò)動态編譯,是跨平台的(de).
5.輕量級Http Server API
JDK1.6 提供了(le)一個(gè)簡單的(de)Http Server API,據此我們可(kě)以構建自己的(de)嵌入式Http Server,它支持Http和(hé)Https協議(yì),提供了(le)HTTP1.1的(de)部分(fēn)實現,沒有被實現的(de)那部分(fēn)可(kě)以通(tōng)過擴展已有的(de)Http Server API來(lái)實現,程序員(yuán)自己實現HttpHandler接口,HttpServer會調用(yòng)HttpHandler實現類的(de)回調方法來(lái)處理(lǐ)客戶端請求,在這(zhè) 裏,我們把一個(gè)Http請求和(hé)它的(de)響應稱爲一個(gè)交換,包裝成HttpExchange類,HttpServer負責将HttpExchange傳給 HttpHandler實現類的(de)回調方法.
6.插入式注解處理(lǐ)API(Pluggable Annotation Processing API)
插入式注解處理(lǐ)API(JSR 269)提供一套标準API來(lái)處理(lǐ)Annotations(JSR 175)
實際上JSR 269不僅僅用(yòng)來(lái)處理(lǐ)Annotation,我覺得(de)更強大(dà)的(de)功能是它建立了(le)Java 語言本身的(de)一個(gè)模型,它把method,package,constructor,type,variable, enum,annotation等Java語言元素映射爲Types和(hé)Elements(兩者有什(shén)麽區(qū)别?),從而将Java語言的(de)語義映射成爲對(duì)象,我 們可(kě)以在javax.lang.model包下(xià)面可(kě)以看到這(zhè)些類. 我們可(kě)以利用(yòng)JSR 269提供的(de)API來(lái)構建一個(gè)功能豐富的(de)元編程(metaprogramming)環境.
JSR 269用(yòng)Annotation Processor在編譯期間而不是運行期間處理(lǐ)Annotation,Annotation Processor相當于編譯器的(de)一個(gè)插件,稱爲插入式注解處理(lǐ).如果Annotation Processor處理(lǐ)Annotation時(shí)(執行process方法)産生了(le)新的(de)Java代碼,編譯器會再調用(yòng)一次Annotation Processor,如果第二次處理(lǐ)還(hái)有新代碼産生,就會接著(zhe)調用(yòng)Annotation Processor,直到沒有新代碼産生爲止.每執行一次process()方法被稱爲一個(gè)"round",這(zhè)樣整個(gè)Annotation processing過程可(kě)以看作是一個(gè)round的(de)序列.
JSR 269主要被設計成爲針對(duì)Tools或者容器的(de)API. 舉個(gè)例子,我們想建立一套基于Annotation的(de)單元測試框架(如TestNG),在測試類裏面用(yòng)Annotation來(lái)标識測試期間需要執行的(de)測試方法.
7.用(yòng)Console開發控制台程序
JDK1.6中提供了(le)java.io.Console 類專用(yòng)來(lái)訪問基于字符的(de)控制台設備.你的(de)程序如果要與Windows下(xià)的(de)cmd或者Linux下(xià)的(de)Terminal交互,就可(kě)以用(yòng)Console類代勞. 但我們不總是能得(de)到可(kě)用(yòng)的(de)Console,一個(gè)JVM是否有可(kě)用(yòng)的(de)Console依賴于底層平台和(hé)JVM如何被調用(yòng).如果JVM是在交互式命令行(比如 Windows的(de)cmd)中啓動的(de),并且輸入輸出沒有重定向到另外的(de)地方,那麽就可(kě)以得(de)到一個(gè)可(kě)用(yòng)的(de)Console實例.
8.對(duì)腳本語言的(de)支持
如: ruby,groovy,javascript
9.Common Annotations
Common annotations原本是Java EE 5.0(JSR 244)規範的(de)一部分(fēn),現在SUN把它的(de)一部分(fēn)放到了(le)Java SE 6.0中.
随著(zhe)Annotation元數據功能(JSR 175)加入到Java SE 5.0裏面,很多(duō)Java 技術(比如EJB,Web Services)都會用(yòng)Annotation部分(fēn)代替XML文件來(lái)配置運行參數(或者說是支持聲明(míng)式編程,如EJB的(de)聲明(míng)式事務),如果這(zhè)些技術爲通(tōng)用(yòng) 目的(de)都單獨定義了(le)自己的(de)Annotations,顯然有點重複建設,,爲其他(tā)相關的(de)Java技術定義一套公共的(de)Annotation是有價值的(de),可(kě)以避免 重複建設的(de)同時(shí),也(yě)保證Java SE和(hé)Java EE 各種技術的(de)一緻性.
下(xià)面列舉出Common Annotations 1.0裏面的(de)10個(gè)Annotations Common Annotations Annotation Retention Target Description Generated Source ANNOTATION_TYPE,CONSTRUCTOR,FIELD,LOCAL_VARIABLE,METHOD,PACKAGE,PARAMETER,TYPE 用(yòng)于标注生成的(de)源代碼Resource Runtime TYPE,METHOD,FIELD用(yòng)于标注所依賴的(de)資源,容器據此注入外部資源依賴,有基于字段的(de)注入和(hé)基于setter方法的(de)注入兩種方式 Resources Runtime TYPE同時(shí)标注多(duō)個(gè)外部依賴,容器會把所有這(zhè)些外部依賴注入PostConstruct Runtime METHOD标注當容器注入所有依賴之後運行的(de)方法,用(yòng)來(lái)進行依賴注入後的(de)初始化(huà)工作,隻有一個(gè)方法可(kě)以标注爲PostConstruct PreDestroy Runtime METHOD當對(duì)象實例将要被從容器當中删掉之前,要執行的(de)回調方法要标注爲PreDestroy RunAs Runtime TYPE用(yòng)于标注用(yòng)什(shén)麽安全角色來(lái)執行被标注類的(de)方法,這(zhè)個(gè)安全角色和(hé)Container的(de)Security角色一緻的(de).RolesAllowed Runtime TYPE,METHOD用(yòng)于标注允許執行被标注類或方法的(de)安全角色,這(zhè)個(gè)安全角色和(hé)Container的(de)Security角色一緻的(de)PermitAll Runtime TYPE,METHOD允許所有角色執行被标注的(de)類或方法DenyAll Runtime TYPE,METHOD不允許任何角色執行被标注的(de)類或方法,表明(míng)該類或方法不能在J
ava EE容器裏面運行DeclareRoles Runtime TYPE用(yòng)來(lái)定義可(kě)以被應用(yòng)程序檢驗的(de)安全角色,通(tōng)常用(yòng)isUserInRole來(lái)檢驗安全角色.
10.JDK1.6中自帶了(le)webservice的(de)功能
因爲集成了(le)JAX-WS,這(zhè)非常方便,不用(yòng)再用(yòng)第三方包來(lái)開發了(le)。
|