大音希声、大象无形

Java企业级应用软件开发探讨

容器和轻量级容器

什么是容器?

JavaEE原话:“Containers are the interface between a component and the low-level platform-specific functionality that supports the component. ”
翻译过来就是“容器就是底层的、与支撑平台相关的、对组件进行功能化支持的接口”。

难以理解?

通俗的解释就是,容器是一系列为了实现分层的概念而定义的一系列功能的平台无关的标准。它的主要用处就是平台无关性和底层操作封装性(Java的核心哲学)。

说白了,容器就是Java的核心哲学在企业级应用范围内的具体实现。

那么使用容器,能给我们带来多大的好处呢?

  1. 强制性分层:通过Java的接口定义机制和强类型编译器的支持,在底层就实现了分层的概念。即使顶层的实现十分没有经验,底层的分层还是可以辨认的。
  2. 底层操作封装:以服务端应用服务器为中心的三层企业开发涉及到的技术相当麻烦和复杂,但是之间又有相当多的共性,所以进行有效的底层次的封装是可行的而且是有必要的。这样开发人员的工作就可以建立在一个稳固的基础上,而不是靠自己的经验去应对这些问题。
  3. 平台无关性:这个也是Java的核心哲学,至于好处吗,我就不多说了
  4. 代码的重用可能性提高:记住,是可能性。具体的重用性要看开发的方式和开发后代码的质量。

就JavaEE而言,它的标准里面只有WEB容器和EJB容器,这两个容器已经充分体现了它们的概念。

但是,还有一种概念上的容器,它的概念与上述概念不同,所以被称作轻量级容器。

首先,轻量级容器不是接口的抽象,没有JavaEE概念中的部署和移除,从概念上说轻量级容器就是一个拥有IOC支持的Bean工厂。

从形象的角度上来看,轻量级容器是一个盒子,盒子里面装满了贴有标签的JavaBean,对外界而言,它是一个魔盒,只要给它一个咒语(咒语必须正确),它就能给你一个礼物。

轻量级容器目前而言没,有相应的标准,但是它的使用范围却比真正的JavaEE标准要宽泛得多(谁不喜欢礼物呢?)。
  • 首先,它是一个非常好的JavaBean工厂(谁没用过工厂模式?)
  • 其次,它能够给你的代码带来IOC支持(懒人最喜欢的生活方式莫过于东西自己来找它)
  • 再次,一般来说,轻量级容器都可以通过动态代理和字节码增强的方式提供AOP的支持

总而言之,轻量级容器是JavaEE容器概念的一种有力补充,它的用法更加灵活,适用的范围更广,从目前的经验上看,开发、测试和管理起来也要比标准容器对象开发起来简单。

  • 轻量级容器一般不会给你提供分布式和集群的支持,因为它的优点就是灵活而不笨重。
  • 轻量级容器就像作汉堡的那两块面包,你想吃什么就往里夹,但是汉堡好吃不好吃,主要就在你放进去的东西和搭配的手艺。
  • 轻量级容器不能强制的要求你分层
  • 轻量级容器的底层封装一般以模块加载进容器的方式实现。
  • 有的人不爱吃汉堡。

总体评价:

容器是Java的核心哲学的体现,而轻量级容器则是工程师开发文化的体现,它可以很灵活的帮助你,对你没有什么具体的要求。二者不会出现谁替代谁的情况。具体的使用方式,还得看你在设计时所处的情况。

更正一下: 就JavaEE而言,它的标准里面只有WEB容器和EJB容器是对它的服务端而言的。客户端还有Application Container和Applet Container两个容器。

posted on 2006-03-24 11:58 guitarpoet 阅读(1262) 评论(1)  编辑  收藏 所属分类: 综述

Feedback

# re: 容器和轻量级容器 2006-03-24 13:22 小陆

容器就是一个控制对象生死的东西,他对外提供一个接口,用户实现这个接口,然后就可以把自己写的业务对象放到容器里面。需要的时候拿出来用,不需要的时候再还给容器,对象的生死存亡由容器负责,容器还可以为这个对象赋予很多额外的功能。
java就是object的容器,我们写的任何一个类都实现了object的接口,当我们需要一个对象的时候,就调用new,容器给我们一个对象。当我们不需要这个对象的时候,容器自动的回收内存。容器赋予对象一些额外的能力,如反射。为什么c++没有反射而java可以,就是因为java是一个容器。
j2ee一个容器的标准,他定义了一些接口,用户必须实现这些接口,才能够把对象放到容器里面。作为报答,j2ee为这些对象赋予了很多强大的功能:远程调用、分布式、事务……  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: