编程语言

img accesine960
博客专家

HiveMind 和 Spring 的比较(之二)

发表于2004/9/27 22:57:00  4354人阅读

分类: java

紧接上文。
   
从上文的 HiveMind Spring 总体架构图片你可以看出 两者的结构差异很大。首先,Spring提供了一套完整的组件,从页面展示的MVC框架到后台的数据库ORMapping等统统都有,其中有些是Spring自有的,有些则提供了集成第三方优秀组件的接口。

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

               

                                                                    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中对函数参数的处理非常好,可读性非常高。

      

 

       待续

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

阅读全文
0 0

相关文章推荐

img
取 消
img