什么是容器?
JavaEE原话:“
Containers are the interface between a
component and the low-level platform-specific functionality that
supports the component. ”
翻译过来就是“容器就是底层的、与支撑平台相关的、对组件进行功能化支持的接口”。
难以理解?
通俗的解释就是,容器是一系列为了实现分层的概念而定义的一系列功能的平台无关的标准。它的主要用处就是平台无关性和底层操作封装性(Java的核心哲学)。
说白了,容器就是
Java的核心哲学在企业级应用范围内的具体实现。
那么使用容器,能给我们带来多大的好处呢?
- 强制性分层:通过Java的接口定义机制和强类型编译器的支持,在底层就实现了分层的概念。即使顶层的实现十分没有经验,底层的分层还是可以辨认的。
- 底层操作封装:以服务端应用服务器为中心的三层企业开发涉及到的技术相当麻烦和复杂,但是之间又有相当多的共性,所以进行有效的底层次的封装是可行的而且是有必要的。这样开发人员的工作就可以建立在一个稳固的基础上,而不是靠自己的经验去应对这些问题。
- 平台无关性:这个也是Java的核心哲学,至于好处吗,我就不多说了
- 代码的重用可能性提高:记住,是可能性。具体的重用性要看开发的方式和开发后代码的质量。
就JavaEE而言,它的标准里面只有WEB容器和EJB容器,这两个容器已经充分体现了它们的概念。
但是,还有一种概念上的容器,它的概念与上述概念不同,所以被称作轻量级容器。
首先,轻量级容器不是接口的抽象,没有JavaEE概念中的部署和移除,从概念上说轻量级容器就是一个拥有IOC支持的Bean工厂。
从形象的角度上来看,轻量级容器是一个盒子,盒子里面装满了贴有标签的JavaBean,对外界而言,它是一个魔盒,只要给它一个咒语(咒语必须正确),它就能给你一个礼物。
轻量级容器目前而言没,有相应的标准,但是它的使用范围却比真正的JavaEE标准要宽泛得多(谁不喜欢礼物呢?)。
- 首先,它是一个非常好的JavaBean工厂(谁没用过工厂模式?)
- 其次,它能够给你的代码带来IOC支持(懒人最喜欢的生活方式莫过于东西自己来找它)
- 再次,一般来说,轻量级容器都可以通过动态代理和字节码增强的方式提供AOP的支持
总而言之,轻量级容器是JavaEE容器概念的一种有力补充,它的用法更加灵活,适用的范围更广,从目前的经验上看,开发、测试和管理起来也要比标准容器对象开发起来简单。
-
轻量级容器一般不会给你提供分布式和集群的支持,因为它的优点就是灵活而不笨重。
-
轻量级容器就像作汉堡的那两块面包,你想吃什么就往里夹,但是汉堡好吃不好吃,主要就在你放进去的东西和搭配的手艺。
-
轻量级容器不能强制的要求你分层
- 轻量级容器的底层封装一般以模块加载进容器的方式实现。
-
有的人不爱吃汉堡。
总体评价:
容器是Java的核心哲学的体现,而轻量级容器则是工程师开发文化的体现,它可以很灵活的帮助你,对你没有什么具体的要求。二者不会出现谁替代谁的情况。具体的使用方式,还得看你在设计时所处的情况。
更正一下:
就JavaEE而言,它的标准里面只有WEB容器和EJB容器是对它的服务端而言的。客户端还有Application Container和Applet Container两个容器。