轻量级容器分析(light weight container)

来源:互联网 发布:公司网络架构 编辑:程序博客网 时间:2024/05/21 06:15

                                                            轻量级容器分析
前言
        目前,基于Web的MVC框架在J2EE的世界内空前繁荣。TTS(www.theserverside.com)网站上几乎每隔一两个星期就会有新的MVC框架发布。比较好的MVC框架,老牌的有Struts、Webwork。新兴的MVC 框架有Spring MVC、Tapestry、JSF等。这些大多是著名团队的作品,另外还有一些边缘团队的作品,也相当出色,如Dinamica、VRaptor等。这些框架都提供了较好的层次分隔能力。在实现良好的MVC 分隔的基础上,通过提供一些现成的辅助类库,同时也促进了生产效率的提高。
        但是,web层知识解决了我们问题的小部分,保持thin web layer是非常值得和重要的策略,它应该只负责同客户的交互和应答逻辑,不涉及系统商业功能如何实现和维护。往往系统的复杂度也是我们Business Model决定的,因此Business 层的架构好坏往往起到非常重要的作用。
        关于Business层的架构大家已经有一个共识,那就是我们的Business Object (Component,Service...)需要一个很好的框架来管理,安全、事务、逻辑划分、代码重用,扩展点,组件生命周期等。幸运的是,我们可以使用容器来解决这些问题(从存在形式上来说,容器也是一个框架)。
1 基本概念
1.1容器
        容器就是一组提供一系列服务的管理器,只要你符合容器的服务要求(规范),容器就可以让你使用范围内的管理服务。 早在Web流行的时候,http container就为我们提供解析Html的能力,让我们的html代码可以通过http协议来发布到internet.随着web应用的推广,动态语言的发展,http容器逐步可以用指定的接口来解释特殊文件中的特殊片断,如:php,asp,jsp等等。
1.2轻量级容器
         "轻量级容器"越来越成为Java世界的讨论关键词之一。那么到底什么是"轻量级"容器?在你浏览最近的有关J2EE的文章或者blog,都有意无意的提到了"lightweigh containter",伴随这个词出现最多的就是"IoC","dependencies inject","AOP"等等。既然是"轻",那就是比较"重"的而言。"重"的典型代表就是EJB,EJB提供了一系列"重量级"企业级服务,并可以让你开发的组件可以很好的集成EJB容器所提供的企业级服务,如JTA等。那么既然有了EJB容器,为什么还需要"轻量级"呢?有过EJB经验的人
深有感触:
     1)、部署复杂,运行缓慢
     2)、内在服务多,启动慢
     3)、规则特多,空间很小
     4)、难以测试(调试)
         ...
        “轻量级容器”的出现就是致力于解决这些问题,并且融入了新的模式,提供更加灵活的服务。轻量级容器不支持分布式环境,不过,不是所有的程序都需要这个服务的。
2  轻量级容器的特点
2.1 封装
  
         面对封装,组件粒度一直是SA(software architecture)的最大问题。根据EJB模型,EJB组件让我们把业务组件封装成粗粒度的业务组件。轻量级容器可以定义更为细粒度的组件,甚至这个组件只有一个对象。以依赖注入(Dependency Injection,DI)为代表的解耦模式,可以让组件不去依赖容器(运行环境)的API。DI作为容器的管道,承担中间人的角色,让使用者(component)和提供者毫无关联。对于以何种粒度去设计业务组件,这就是业务的具体需求所决定的,任何框架都帮不了你。而轻量级容器提供技术方面的支持也绝对让你有的放矢。
2.2组件
        面对组件,真正的组件就像你手里的U-disk,插到USB上就可以享受其功能。
        轻量级容器通过反向控制(Inversion of Control,IoC)让容器具有主动权,去管理插进来的组件。只要组件是符合标准的,就可以被轻量级容器管理。
2.3Running Anywhere
        面对Running Anywhere,轻量级容器让组件以POJO(plain old java object)的形式存在,只要你有java.exe就可以运行它。这样,组件根本就是一个独立的功能集成类,根本不需要容器就可以实现测试行为。
        以上三点,给我们带来的好处不仅如此,我们伴随着还将重用,生产力,测试(质量),移植性等各个方面受益。
3轻量级容器的现状
        目前,轻量级容器在open source范围已经得到了广泛的认可,而且,作为下一代J2EE构架的基础有着无法比拟的优势。
       当前,已存在的轻量级容器框架中(见下表),有绝大部分来自open source社群,这给我们对这项技术的了解降低了门槛。

序号容器名称网址国内/国外使用情况
1Spring Frameworkhttp://www.springframework.org/使用广泛,评价极好
2PicoContainerhttp://www.picocontainer.org/有人使用,评价很好
3Appfusehttp://raibledesigns.com/wiki/有人使用,评价很好
可以集成Sping在内的所有框架
4HiveMindhttp://jakarta.apache.org/hivemind/研究的居多,评价一般
5Avalonhttp://avalon.apache.org/该项目已经停止
6NanoContainehttp://www.nanocontainer.org/估计国内使用的人很少
7Peapod      http://www.peapod.org/估计国内使用的人很少
8Carbonhttp://carbon.sourceforge.net/估计国内使用的人很少
9Excalibur   http://excalibur.apache.org/index.html估计国内使用的人很少
10Gravity    http://gravity.dev.java.net估计国内使用的人很少

                                                                                  当前存在的轻量级容器列表

      以上PicoContainer作为type3(IoC)的创导者和spring IoC容器已经成这里面的佼佼者。IoC容器,给传统的container(as EJB)带来了深远的冲击。
4 Spring框架介绍
4.1背景
      
       SpringFramework 实际上是Expert One-on-One J2EE Design andDevelopment 一书中所阐述的设计思想的具体实现。在One-on-One 一书中,RodJohnson 倡导J2EE 实用主义的设计思想,并随书提供了一个初步的开发框架实现(interface21 开发包)。而SpringFramework 正是这一思想的更全面和具体的体现。Rod Johnson 在interface21 开发包的基础之上,进行了进一步的改造和扩充,使其发展为一个更加开放、清晰、全面、高效的开发框架。
4.2概览
      Spring包含许多功能和特性,并被很好地组织在下图所示的七个模块中。
                                                                          


                                                                             Spring框架概览

        Beans包是框架的最基础部分, 并提供依赖注入(Dependency Injection)特性来使你可管理Bean包容功能。 这里的基础概念是BeanFactory,它提供Factory模式来消除对程序性单例的需要, 并允许你从实际逻辑中分离出依赖关系的配置和描述。
         构建于Beans包上Context包,提供了一种框架式的Bean访问方式, 有些象JNDI注册。Context包的特性得自Beans包,并添加了消息, 事件传播,资源装载和Context的透明创建,如通过Servlet容器。
        DAO包提供了JDBC的抽象层,它可消除编写冗长的JDBC代码和解析数据库厂商特有的错误代码。 该包也提供了一种方法实现编程性和声明性事务管理,不仅仅是针对实现特定接口的类, 而是对所有的POJO。
        ORM包为流行的关系-对象映射提供了集成层,包括JDO,Hibernate和iBatis。 通过ORM包,你可与所有Spring提供的其他特性相结合来使用这些O/R映射, 如前边提到的简单声明性事务管理。
        Spring的AOP包提供与AOP联盟兼容的面向方面编程实现,允许你定义, 如方法拦截器和切点,来干净地给从逻辑上说应该被分离的功能实现代码解耦。 使用源码级的元数据功能,你可将各种行为信息合并到你的代码中,有点象.Net的attribute。
       Spring的Web包提供了基本的面向Web的综合特性,如Multipart功能, 使用Servlet监听器的Context的初始化和面向Web的Applicatin Context。 当与WebWork或Struts一起使用Spring时,这个包使Spring可与其他框架结合。 Spring的Web MVC包提供了面向Web应用的Model-View-Controller实现。 Spring的MVC实现不仅仅是一种实现,它提供了一种domain model代码和web form的清晰分离, 这使你可使用Spring框架的所有其他特性,如校验。

4.3使用Spring的好处
        
        Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为
            J2EE的 API特制的framework,Spring致力于解决剩下的问题。 
        Spring能消除在许多工程中常见的对Singleton的过多使用。这是一个很大的问题,它降低了系统的可测
            试性和面向对象的程度。 
        –通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的
            属性文件的需要。曾经对某个类要寻找的是哪个魔法般的属性项或系统属性感到不解,为此不得不去
            读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性。Inversion of Control的使用帮助
            了这种简化。 
        –通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。 
        –Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没
           有依赖于Spring。 
        –使用Spring构建的应用程序易于单元测试。 
        –Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来
           业务接口,却不会影响调用代码。 
        –Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适用于许多web应
           用。
        –Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚
           需要一个JTA实现。 
        –Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如Hibernate)。
5 结束语
        本文介绍了轻量级容器的概念、优点以及当前存在的和流行的容器,最后着重介绍了Spring框架。目的是为了对轻量级容器的选择提供指导,为作者推荐使用的Spring框架的学习提供入门。
        如果你想进一步地学习,请参阅本文参考资料部分的链接。

6参考资料
      –透视轻量级容器                                                 
          http://spring.jactiongroup.net/viewtopic.php?t=825
      –轻量级J2EE Business Layer Architecture设计指导
          http://blog.blogchina.com/category.10549.html
      –spring开发指南(V0.8)
          http://www.xiaxin.net/Spring_Dev_Guide.rar 
      –Introducing to Spring Framework 
          http://spring.jactiongroup.net/viewtopic.php?t=453
      –Spring - Java/J2EE Application Framework
          http://www.jactiongroup.net/reference/html/index.html

 

 

 

 

原创粉丝点击