`
ihuashao
  • 浏览: 4765936 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

HiveMind 和 Spring 的比较(之二)

阅读更多

紧接上文。
从上文的 HiveMind Spring 总体架构图片你可以看出 两者的结构差异很大。首先,Spring提供了一套完整的组件,从页面展示的MVC框架到后台的数据库ORMapping等统统都有,其中有些是Spring自有的,有些则提供了集成第三方优秀组件的接口。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

相比之下HiveMind就单薄多了。我第一眼看到HiveMind的架构图片的时候想到了 微软COM组件模型的图片。如下:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><font size="4"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></font></shapetype>

o_comstruct.jpg


这里贴出COM的图片来,是为了更好的比较和说明HiveMind的结构。

HiveMindSpring的不同在于,HiveMind使用以组件服务为导向的架构。也就是说每一个Java类提供一个服务( Service point ),给这个服务起名字注册到HiveMind Registry后,客户应用程序就可以使用这个服务名字来使用Java类提供的服务。(见后面的代码)

了解COM原理的读者可能都知道,在COM组件接口不变的情况下,即使COM的算法实现完全发生变化,也丝毫不受影响客户端的使用。这也就是提倡的面向接口的编程。从这一点上来说HiveMindCOM如出一澈。Spring 框架没有这个基于服务的特性。(下文专门分析Sprign的实现原理)。

HiveMind另一个特点是借鉴Eclipse插件的实现方式。在HiveMind 术语中你常会看到如下XML定义:

<module id=“..“>

<service-point id=“..“ interface=“..“ >

<configuration-point id=“..“ >

等等这样的定义。

HiveMind中你可以把相关配置文件放在多个Xml文件中而不像Spring那样放在一个文件中。只要把名为:hivemodule.xml 的文件放在ClassPathHiveMind就可以识别到。

上面提到的 面向服务和面向配置的特性正是HiveMind区别于Spring的地方。

说了这么多区别,并不是要把HiveMindSpring对立起来,其实HiveMind是可以和Spring紧密继承使用的。

我现在的感觉有点类似于:COM组件和IIS的关系,毕竟Spring已经很强大了。

看个例子吧:

HiveMind来实现AOP的拦截方法执行的效果:

配置文件:

hivemodule.xml:

 <?xml version="1.0"?>

 <module id="tcfhivemindtest" version="1.0.0">

  <service-point id="Adder" interface="tcfhivemindtest.Adder">

   <create-instance class="tcfhivemindtest.impl.AdderImpl"/>

   <interceptor service-id="hivemind.LoggingInterceptor"/> 

  </service-point>

 </module>

Java代码:

Adder.java:

 package tcfhivemindtest;

 public interface Adder

 {

  public int add(int arg0, int arg1);

 }

AdderImpl.java:

 package tcfhivemindtest.impl;

 import tcfhivemindtest.Adder;

 public class AdderImpl implements Adder

 { 

  public int add(int arg0, int arg1)

  {

  return arg0 + arg1;

  }

 }

HiveMain.java:

 package tcfhivemindtest.main;

 import org.apache.hivemind.Registry;

 import org.apache.hivemind.impl.RegistryBuilder;

 import tcfhivemindtest.Adder;

 public class HiveMain

 {

  public static void main(String[] args)

  {

  Registry registry = RegistryBuilder.constructDefaultRegistry();

  Adder a = (Adder) registry.getService("tcfhivemindtest.Adder", Adder.class);

  System.out.println("结果 = " + a.add(4, 7));

  }

 }

运行后的效果如下:

 adder = <SingletonProxy for tcfhivemindtest.Adder(tcfhivemindtest.Adder)>

 tcfhivemindtest.Adder [DEBUG] BEGIN add(4, 7)

 tcfhivemindtest.Adder [DEBUG] END add() [11]

 结果 = 11

上面有个小细节:就是HiveMind中对函数参数的处理非常好,可读性非常高。

待续

田春峰
┏━━━━━━━━━━┓
┏━┓┃中秋快乐┃┏━┓
┃逢┃┗━━━━┛┃迎┃
┃千┃ ━  ━━ ┃中┃
┃禧┃━┳━┏━┓┃秋┃
┃举┃┃┃┃┗━┛┃佳┃
┃世┃┃┃┃┏┳┓┃节┃
┃共┃ ┃ ┃╋┃┃同┃
┃欢┃ ┛ ┗┻┛┃庆┃
┗━┛      ┗━┛

分享到:
评论

相关推荐

    Hivemind资料

    Hivemind在设计上与Spring、Guice等依赖注入框架有相似之处,但更专注于服务的模块化和可配置性。Hivemind的模块化设计使得它在大型项目中能更好地管理和扩展服务,而Spring则更加全面,提供了AOP、事务管理等多种...

    Tapestry + spring

    在整合Tapestry和Spring框架时,主要的目标是利用Spring的依赖注入能力为Tapestry应用提供服务。在早期版本的Tapestry中,我们通常会扩展BaseEngine类来引用Spring Bean。但在Tapestry 4及更高版本中,BaseEngine类...

    spring入门好教程

    更重要的是,Spring与其他许多流行产品有着紧密的集成,形成了一种整体大于部分之和的效果,尽管难以用一句简洁的话来概括,但使用者都能深深感受到其魅力。 Spring框架的稳定性和可靠性是其另一个显著特征。它已经...

    Spring ppt

    除了Spring,还有PicoContainer、HiveMind和其他控制反转框架。尽管EJB 3.0的编程模型受到了Spring IoC特性和Hibernate的启发,但EJB仍然在某些特定应用场景(如分布式事务管理、RMI远程调用)中保留了独特的能力。 ...

    dwr_and_spring

    - **与Java框架集成**:DWR能够很好地与Struts、Hivemind、Hibernate、JSF和Spring等流行Java框架集成,增强了其在企业级应用中的适用性。 - **安全性机制**:DWR提供了安全措施来防止未授权访问,确保了数据传输...

    Java轻量级容器的比较.pdf

    3. **扩展性和维护性**:Spring和HiveMind提供了更好的扩展性和维护工具,而PicoContainer则更侧重于核心功能。 4. **配置复杂性**:如果你希望配置尽可能简单,PicoContainer的非XML配置可能更吸引人,而Spring的...

    Application Framework Components-开源

    =========================================大修! ===========================================用于构建基于Java的应用程序的某些组件基于HiveMind和Spring Framwork,包括维修组件

    Java企业应用系统框架的比较与选择

    轻量级框架如Struts、Tapestry(表现层),Spring、Hivemind(业务逻辑层),Hibernate、JDO、iBATIS(持久层)等,它们不依赖EJB容器,因此更加灵活和可移植。Spring框架是轻量级框架的代表,它支持IoC和AOP,简化...

    Tapestry4开发指南

    #### 二、Tapestry4与Hivemind的结合 最初,Tapestry3.1是在Hivemind框架下开发的,但并未从Hivemind中独立出来,最终演化为Tapestry4。这一决策让许多开发者对Hivemind持有保留态度,尤其是那些熟悉Spring框架的...

    Tapestry4环境搭建和应用

    虽然Spring框架在IoC和DI方面也很强大,但Hivemind在Tapestry4中的整合提供了更直接的框架支持,允许开发者根据需求定制和扩展Tapestry的功能。 在实践中,Tapestry4的灵活性和可扩展性体现在可以利用Hivemind重新...

    深入浅出Tapestry高清

    HiveMind是一种依赖注入框架,它可以解决传统Java应用中对象管理混乱的问题,提供了对象生命周期管理、组件配置和依赖关系自动解析等功能。HiveMind与Tapestry结合,可以让开发者专注于业务逻辑的实现,而无需关心...

    深入浅出tapestry

    本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web..., 本书适合Web框架技术的爱好者、Tapestry入门学习者、Tapestry表现层开发人员和关注下一代的Web开发技术的公司与个人用户。

    ioc模式与工厂模式的比较[借鉴].pdf

    而在Spring框架中,依赖注入则主要通过setter方法或构造器注入来实现,这属于第二种类型的IOC模式。 在第三种类型的IOC模式中,依赖关系在对象构造时就已完成,如PicoContainer和HiveMind,这要求在构造函数中注入...

    轻量型框架资源手册1

    春天的 SOA 技术专题之“业务流程执行语言 BPEL”部分详细介绍了 SOA 技术的概念和特点,以及其在业务流程执行语言 BPEL 中的应用和优势。 轻量型框架的发展是为了解决传统 EJB 技术的问题,如复杂的 XML 配置和...

    图书馆管理系统开题报告 (2).docx

    - 业务层:Spring、Hivemind、PicoContainer。 - 数据持久层:Hibernate、iBatis。 - **国内外研究热点**:轻量级J2EE框架技术的研究是当前热点之一。 #### 三、研究的基本内容 1. **系统体系结构的选择与搭建*...

    在Eclipse RCP中实现控制反转(IoC).doc

    2. **基于setter**:依赖通过setter方法注入,这是Spring和HiveMind等框架常用的方式。 3. **基于构造函数**:依赖作为构造函数的参数传入,PicoContainer只支持这种模式。 在Eclipse RCP环境中,为了实现IoC而不...

    Framed-开源

    1. **Spring框架**:Spring是Java领域中最著名的轻量级框架之一,它提供了依赖注入(DI)和面向切面编程(AOP)的功能,简化了应用的开发和测试。在Framed项目中,Spring可能用于处理服务层逻辑、事务管理以及与其他...

Global site tag (gtag.js) - Google Analytics