- -
目前,起源於開源社區的Java技術日益流行,它們大都是對先前的一些技術弊端的改進。例如,對於非常流行的Struts和EJB,批評的聲音是越來越響。業界普遍要求使用更少侵入性,更輕量級和更易於測試的技術來取代它們。也許輕量軟件開發方法學(如敏捷軟件開發,XP)的興起,對於這一趨勢起了推波助瀾的作用。主要的技術趨勢有:
Hibernate成爲主流技術
Hibernate日益成爲主流的POJO持久層技術。Java社區要求在EJB和POJO中使用同樣的持久化機制,這樣,業務層的代碼將不受業務對象持久化機制的影響。EJB3規範草案似乎在響應這一要求,它在EJB3的持久化中使用和Hibernate類似的機制。考慮到Hibernate加入了JBoss,和Gavin King在EJB3專家組的影響,這點並不奇怪。
Dependency Injection,IoC容器
IoC容器是一種輕量級容器,它使用配置文件定義和管理服務之間的依賴關係。通過IoC容器,服務的使用者不必主動地請求服務,而是依靠容器注入所需的服務,從而實現了獲取服務方式的"控制反轉"(Inversion of Control)。也稱爲"依賴注入"(Dependancy Injection)。
同時,IoC容器也象常規的組件容器一樣,提供了調度組件並管理組件生命週期的功能。
在我看來,使用IoC容器的最大好處是使代碼更加易於測試。
AOP進入實踐階段
AOP(Aspect Oriented Programming的縮寫),意思是面向Aspect編程,是面向對象編程方法論的延續。從AOP的角度來看,軟件系統可以看作是由多個關注點(Concern)組合而成。AOP的基本思想是,將通用的功能關注點(Concern)從系統中分離出來,封裝成功能獨立的模塊單元(Aspect);最後,通過"Aspect Weaver" 組裝關注點並轉換成可執行代碼。單個模塊單元(Aspect)可織入(Weave)不同的過程,模塊和對象當中,從而提高了代碼的複用性。
Annotations,Metadata,JSR-175
如果你用過XDoclet,JSR-175的概念和它很相似。JSR-175不過是把XDoclet的功能加入了Java語言規範。試看下面簡單的代碼:
@entity( table = "UI_USER" )
public class User {
@primarykey( column="UI_USER_OID", generator="sequence")
private Long oid;
@attribute( column="HAWKID" )
private String hawkid
...
}
在以上的例子中,@標籤告訴Java類將自己映射到指定的數據表和字段,從而通過Metadata數據完成持久化的工作。參見"Hibernate成爲主流技術"。
Java規則引擎
當前在Java社區,一個引人注目的新技術是Java規則引擎,它起源於基於規則的專家系統。同時,也可用於分離商業決策者的商業決策邏輯和應用開發者的技術決策,並把這些商業決策放在中心數據庫或其他統一的地方,讓它們能在運行時(即商務時間)可以動態地管理和修改。從而提供軟件系統的柔性和適應性,幫助開發人員更好地"擁抱變化"。
不難看出,規則引擎的基本思想和AOP有着異曲同工之妙。
JSR-94將規則引擎技術引入Java世界,但並沒有定義編寫規則的語法,因此在JSR-94的產品實現中移植還是需要一些工作。