首先轻量级与重量级是一个相对的概念,主要是对应用框架使用方便性和所提供服务特性等方面做比较的。
比方说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 消失。