天天看點

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 消失。