什么是容器?
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两个容器。
分享到:
相关推荐
基于容器的轻量级工业控制系统网络安全测试床研究.pdf
ioc的注解轻量集框架。你只需要声音接口,并在接口方法上添加注解,然后new该接口,空实现就好。再使用工厂方法,创建代理接口对象即可。
Jetty 是一个用 Java 实现、开源、基于标准的,并且具有丰富功能的 Http 服务器和 Web 容器,可以免费的用于商业行为。Jetty 这个项目成立于 1995 年,现在已经有非常多的成功产品基于 Jetty,比如 Apache Geromino...
NULL 博文链接:https://qindongliang.iteye.com/blog/2090085
Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立...
轻量级虚拟化容器技术介绍.pptx
介绍了swing的重量级容器和轻量级容器和其组件的实例用法。
我自己做的第一个文档
为解决这些问题,提出了一种Web运行环境轻量级虚拟化方法,采用Docker容器技术实现进程级别的隔离。本虚拟化方法可在一个基本内核上支持运行多种Web运行环境的容器。此外,为了减轻容器创建负载,提出了容器启动机制...
iSulad是一个由C/C++编写实现的轻量级容器引擎,具有轻、灵、巧、快的特点,不受硬件规格和架构限制,底噪开销更小,可应用的领域更为广泛。iSulad是一个由C/C++编写实现的轻量级容器引擎,具有轻、灵、巧、快的特点...
主要是 VMware 为容器化应用而设计的轻量级的操作系统。类似RedHat的Atomic 项目,以及Ubuntu的Snappy项目。Project Photon主要用于运行VMware vSphere和VMware vCloud,它使得企业可以在单一平台上同时启动容器与...
打造轻量级的实体类数据容器
示例源码工程 博文链接:https://longstudio.iteye.com/blog/1955587
轻量级打包工具与容器运行时,一条命令将工作目录打包成可执行文件,并以轻量级容器的方式直接运行在目标机器上。示例是一个 c 语言编写的 ip 解析服务 gcc -o ipservice,其依赖 ipdb 资源文件。使用 parker 将可...
Java轻量级容器的比较.pdf
dockerlite 是使用脚本编写,利用了 LXC 和 BTRFS 的轻量级 Linux 虚拟化实现,这不是虚拟机哦~和传统的虚拟机实现不同,dockerlite 利用 LXC(Linux 容器)实现运行时资源隔离,并利用 Btrfs 文件系统的快照功能...
InversifyJS:一个强大的和轻量级控制反转容器,支持JavaScript和Node.js
iSulad是一个轻量级的...iSulad是一个由C/C++编写实现的轻量级容器引擎,具有轻、灵、巧、快的特点,不受硬件规格和架构限制,底噪开销更小,可应用的领域更为广泛。iSulad支持多种容器runtime,包括lxc、runc和kata。
极轻量级Ioc容器,扩展也不少。 简单例子:container.Register, Foo>(); var instance = container.GetInstance(); Assert.IsInstanceOfType(instance, typeof(Foo)); 标签:LightInject
WireJS 一个轻量级、快速、灵活的Javascript IOC容器