1. 程式人生 > >java中重量級和輕量級的區別

java中重量級和輕量級的區別

首先輕量級與重量級是一個相對的概念,主要是對應用框架使用方便性和所提供服務特性等方面做比較的。

重量級的框架在耦合性方面要比輕量級的大一些,但是重量級框架提供的服務要比輕量級的多。

比方說EJB就是一個重量級的框架,因為它對所編寫的程式碼有限制,同時它也提供分散式等複雜的功能。
相比之下,Spring就是輕量級框架,因為它需要的只是普通的Java物件,它所提供的也只是足夠中小應用使用的功能。
但是,隨著Spring的發展,它也所具有的功能也越來越強大,而EJB的使用也在變得簡單,所以這隨著技術的發展,這個概率也需要更新。畢竟它的出現是為了和使用複雜的框架做區別,那麼當各家都在不斷吸收對方長處的時候這個界線就沒有那麼明顯了。

其實:劃分一個應用是否屬於輕量級還是重量級,主要看它使用了多少服務.使用的服務越多,

容器要為普通java物件做的工作就越多,必然會影響到應用的釋出時間或者是執行效能.

對於spring容器,它提供了多服務但這些服務並不是預設為應用開啟的應用需要某種服務還需要指明使用該服務如果

應用使用的服務很少:只使用了spring核心服務那麼我們可以認為此時應用屬於輕量級的如果應用使用了spring提供的

大部分服務這時應用就屬於重目前EJB容器就因為它預設為應用提供了EJB規範中所有的功所以它屬於重量級

另外:輕量級元件是用JAVA程式碼畫出來的,這樣具有平臺移植性
而重量級元件是呼叫作業系統的函式畫出來的元件,比如主窗體
一般來說盡量用輕量級的元件,這樣對程式的移植性很好
一般javax.swing包裡的元件大部分是輕量級的
java.awt裡面的是重量級的

Swing是由100%純Java實現的,Swing元件是用Java實現的輕量級( light-weight)元件,沒有原生代碼,不依賴作業系統的支援,這是它與AWT元件的最大區別。由於AWT元件通過與具體平臺相關的對等類(Peer)實現,因此Swing比AWT元件具有更強的實用性。Swing在不同的平臺上表現一致,並且有能力提供本地視窗系統不支援的其它特性。

總的說來:

重量級元件:執行平臺必須存在一個對應的元件.
輕量級元件:在一個虛擬的畫布上畫出來的元件(所以swing較慢),所有輕量級元件"最終"要放到重量級元件(jframe,jdialog)中.由於是畫出來所以能做到各種平臺上一致的表現.同樣,如果混合重量級元件和輕量級元件容易引起重疊上的衝突.

JDK 1.2 之後,Java 有了另一組 GUI 的 API,叫做 Swing。因為 Swing 是 lightweight 的 API,所以無所不能,不但有各式各樣先進的元件,而且連元件風格都可抽換。Swing 出現之後,大家很快地就不太使用 AWT 了。
不要以為 Swing 是用來取代 AWT 的,其實 Swing 是架構在 AWT 之上做出來的(Swing 有四個 heavyweight 元件),沒有 AWT,也就不會有 Swing。Swing 的出現只是減少程式設計師直接使用 AWT 的機會,而不會讓 AWT 消失。