熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java那些事兒 - JavaOne 2011、CDI和Google Dart語言

2013-11-15 12:15:38  來源: JSP教程 

  對於Java社區來說月和月間最重要的事件是一年一度的JavaOne大會的召開JavaOne 的 主題是“推動Java向前發展(Moving Java Forward)”從這個主題可以看出Oracle正試圖以領導者的身份帶領Java社區來共同推動Java的發展Java SE 的發布是這個過程中的一個重要裡程碑相對於上一次JavaOne會議來說JavaOne 在社區中的評價比較不錯被認為是一次成功的會議Oracle也更加重視社區在推動Java發展中的作用遺憾的是由於Google和Oracle之間的專利訴訟來自Google的開發者再一次缺席了JavaOne大會

  在JavaOne Oracle發布了一些新的技術和項目也公布了一些重要項目的發展規劃

Java SE

  根據社區的反饋Java SE 的發布時間從年底推遲到了年夏距離Java SE 的發布差不多正好年的時間在Java SE 中會包含的內容包括

  • Jigsaw項目為Java平台和Java應用提供模塊化系統的支持
  • Lambda項目為Java語言增加閉包的支持為Java集合API提供批量並行操作API如filter/map/reduce
  • 把JRockit虛擬機中的部分特性整合到HotSpot虛擬機中提供一個統一的虛擬機實現
  • 集成JavaFX 在JavaOne 上JavaFX 正式發布並會在JDK u中集成JavaFX 的安裝Java SE 中則會直接集成JavaFX
  • 虛擬機上可以直接使用的新的JavaScript引擎以及更好的JavaScript和Java互操作性新的JavaScript引擎稱為Nashorn是一個基於JSR 的實現
  • 在移動設備上增加對多點觸摸攝像頭地理位置信息羅盤和重力加速器的支持
  • 對Java 安全日期/時間網絡國際化和可訪問性API的更新

Java EE

  Java EE 的目標是把Java EE技術與目前炙手可熱的雲計算相結合把Java EE平台本身變成一個服務(Platform as a ServicePaaS)同時提供彈性計算(Elastic computing)和多租戶(Multitenancy)的支持相對於目前已有的雲計算技術Java EE 的最大優勢在於標准化和開放性Java EE 的內容包括

  • 提供平台即服務的支持包括服務定義和服務提供以及在API中支持多租戶
  • 增強Web Profile的能力增加對JAX RS 的支持
  • 進一步簡化開發包括新的JMS 更多的依賴注入的使用以及更多的服務元數據和優化配置方式等

Java ME

  在Java ME方面發展的重點是與Java SE保持同步當Java SE中有新的更新時盡快的同步到Java ME中這其中包括發布版本的同步Java ME API可以運行在Java SE環境中以及一致的工具接口等另外的一個目標是讓Java平台支持所有不同的平台不管是什麼樣的CPU和內存限制環境最後一個方向是與內容和服 務進行深度集成包括訪問運營商提供的服務

CDI

  對於依賴注入的概念相信很多開 發人員都不陌生一個組件在運行過程中會依賴其他組件提供的功能傳統的做法是由組件本身負責查找所需的依賴對象這種方式會造成組件之間的緊耦合不利 於組件的維護和更新依賴注入的做法則是由組件以聲明式的方式表明其依賴關系由框架在運行時把所需的組件的Java對象注入到當前組件中相對於 Java SE來說依賴注入的概念對於Java EE更加適用Java EE中的很多資源和服務都是由容器來負責管理的對於單個應用來說查找由容器負責管理的組件並不是一件容易的事情更好的做法是由應用來聲明所需的資源 和服務由容器負責注入到應用中通過這種方式容器也可以更好的對資源和服務進行管理以數據庫連接為例傳統的做法需要由應用本身加載相關驅動並創建 數據庫連接以及在適當的時候進行釋放而使用容器管理並注入依賴的做法則減輕了應用開發人員的工作量

  Java EE 中添加了對依賴注入的有限支持通過注解可以往容器管理的對象中注入資源的對應對象Java EE 中把依賴注入的概念更進一步即引入了JSR (Contexts and Dependency Injection for the Java EE platform)規范簡稱CDICDI規范吸收了來自Spring IoC容器JBoss Seam和Google Guice的 最佳實踐並與Java EE開發的實際需要相結合正如CDI的字面含義一樣CDI中的兩個核心功能是上下文信息(context)和依賴注入這兩個功能的結合點是Java 中基本的組件模型bean在CDI中bean 定義了應用的狀態和邏輯並由容器來進行管理每個被管理的bean都有定義好的綁定到特定上下文的作用域和生命周期當需要注入或訪問bean時容器 會從作用域對應的上下文中獲取當作用域失效時對應上下文中所有的對象都會被刪除CDI中的每個bean都可以作為依賴注入時的目標

  CDI中預定義了一些常用的作用域默認的作用域是Dependent表示只對被注入的對象生效作用域ApplicationScoped表示 應用的全局作用域用來創建全局唯一的對象RequestScoped和SessionScoped則與HTTP相關分別表示HTTP請求和HTTP 會話ConversationScoped是由應用自定義生命周期長短的作用域可以用來實現跨多頁面的工作流如下面代碼中的 OrderProcessor類只存活在HTTP請求中並且依賴OrderDao接口的實現容器會在運行時查找到OrderDao接口的實現對象並 注入到OrderProcessor類的對象中

  @Named @RequestScoped public class OrderProcessor { @Inject private OrderDao orderDao; }

  通常的依賴注入方式是在代碼中只依賴接口由容器在運行時選擇合適的實現類的對象來進行注入如果接口只有一個實現類則不需要額外的聲明如果接 口有不同的實現則需要使用限定符(qualifier)來聲明具體使用的實現否則容器無法做出正確的選擇CDI的一個特點是限定符不是普通的字符 串而是類型安全的注解

  通過Qualifier元注解可以創建新的限定符注解如下面的代碼創建了一個新的限定符注解InMemory

  @Qualifier @Retention(RUNTIME) @Target({TYPE}) public @interface InMemory {}

  該注解可以添加在OrderDao接口的實現上

  @InMemory public class InMemoryOrderDao implements OrderDao { }

  如果在測試時希望使用簡單的基於內存的存儲實現可以使用InMemory注解來聲明這樣容器在注入時會使用InMemoryOrderDao類的對象

  @Named @RequestScoped public class OrderProcessor { @Inject @InMemory private OrderDao orderDao; }

  使用類型安全的注解類型可以避免使用字符串時會出現的問題在使用字符串來區分時可能由於字符串內容的細微錯誤而造成難以發現的問題

Google Dart語言

  Google的開發人員似乎熱衷於開發新的編程語言而且每一次新的語言都很造成比較大的影響前不久Google的開發人員發布了新的編程語言Dart Dart語言的目標是創建結構化的Web應用在使用方式上類似Nodejs和GWT即在服務器端和客戶端采用相同的編程語言在Nodejs中 都是使用的JavaScript在GWT中則是以Java為主而Dart則更像是升級版的GWT只是用了一種設計更好的語言來替代Java在服務 器端Dart運行在虛擬機(DartVM)之上而在浏覽器端則轉換成JavaScript來執行

  在語法上Dart像是Scala和JavaScript的一個結合體Dart中有類和接口的概念同時類型聲明是可選的在Dart中變量的 類型聲明是可選的這麼設計的出發點是讓開發人員可以根據開發的不同階段以及應用的類型來選擇合適的類型聲明策略在初期的原型開發階段或是開發小型應用 時使用動態類型是一個不錯的選擇而對於復雜的模塊化的大型應用來說采用靜態類型則是一個更好的做法Dart並不對類型聲明的選擇做出限制

  下面的Dart代碼示例展示了可選類型和類繼承的基本用法

  class Animal { var legs; Animal(thislegs); //簡化的構造方法 tellMyLegs() { print(thislegs); } } class Dog extends Animal { Dog() : super(); } main() { var dog = new Dog(); dogtellMyLegs(); //輸出 }

  值得一提的是Dart的並發編程模型Dart程序在運行時總是單線程的這點類似JavaScript並發性是通過類似Actor的隔離體(isolate)來完成的每個隔離體是一個並發運行的單元有自己的內存和執行邏輯隔離體之間通過消息傳遞來進行通訊Dart中的隔離體與HTML中的Web Worker非常相似

  Dart的目標並不是替代JavaScript或Java而是面向移動平台在Dart中除了核心庫之外還有一個DOM API的庫可以對DOM進行操作

  Dart語言由於剛發布不久很多東西還處於比較初級的階段不過相關的資源都是開放源代碼的感興趣的人可以關注下面的鏈接Dart語言官方網站Google Code上的Dart源代碼和DartForce網站最簡單的做法是下載Linux和Windows平台(不支持Windows XP)上的Dart虛擬機並寫一些Dart代碼來進行試驗


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20590.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.