服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

spring vs. hivemind 优点缺点大比拼


  在如下方面hivemind优于spring:
  
  * hivemind强制针对接口编程;
  
  * hivemind使用module概念来分组管理service,利于并行和迭代开发;
  
  * hivemind使用的配置文件格式更清楚简明,特别是将接口和实现统一定义成1个service,而spring可能要定义好几个bean元素;
  
  * 在增加或移去interceptor时,hivemind只要修改1行配置文件,而spring至少要修改两个bean元素;
  
  * 在定义interceptor时,hivemind采用javassist类库,性能优于spring采用的jdk proxy。
  
  在如下方面spring优于hivemind:
  
  * spring的aop框架较为成熟,编写interceptor的难度较低。
  
  * spring内建和hibernate的集成,hivemind尚未内建该集成。
  
  * spring的transaction management支持各种transaction api,如jdbc、jdo、jta等等。
  
  基于以上发现,建议在下一项目中采用hivemind。因为已经自行开发了hivemind和hibernate的集成以及简单的transaction management代码,因而在下一项目中并不特别需要spring的相应功能。不过,当前hivemind是1.0-rc2版,一旦发布1.0-release版则应尽快升级。
  
  [spring vs. hivemind]:
  
  * service oriented?
  spring : yes.
  hivemind : yes.
  
  * how to define a service?
  spring :
  define a pojo. (在spring术语中称之为bean,但实际上是pojo。)
  
  配置文件:<bean id="examplebean" class="examples.examplebean"/>
  hivemind:
  define an interface and core implementation pojo.
  
  配置文件:service-point元素。
  comments:
  hivemind强制针对接口编程,优于spring。
  
  * 是否提供service的namespace?
  spring:
  仅仅使用id属性来唯一识别service。
  支持多配置文件。
  hivemind:
  提供module概念用于管理service namespace,类似于java中的package。
  支持多个配置文件。
  comments:
  hivemind略优。
  
  * service lifecycle?
  spring:
  2 lifecycle models: singleton, prototype.
  hivemind:
  4 lifecycle models: primitive, singleton, threaded, pooled.
  comments:
  最常用的就是singleton模型。虽然hivemind模型多于spring,但不构成优势。
  
  * who manages service?
  spring: beanfactory or applicationcontext.
  hivemind: registry.
  
  * dependency injection?
  spring: yes. type-2 and type-3 supported.
  hivemind: yes. type-2 and type-3 supported.
  
  * service depenency injection?
  spring:
  使用ref元素。
  <property name="beanone"><ref bean="anotherexamplebean"/></property>
  hivemind:
  在配置文件中使用set-service元素。
  <set-service service-id="anotherservice"/>
  comments:
  在更换实现时,hivemind因强制针对接口编程而占有优势。
  
  * intializing and finalizing methods?
  spring :
  <bean id="exampleinitbean" class="examples.examplebean"
  init-method="init()"
  destroy-method="cleanup()"/>
  />
  hivemind:
  <construct class="..." initialize-method="..."/>
  不支持finalizing method。
  comments:
  spring略优。
  
  * how to configure aop?
  spring:
  <!-- step 1 : 定义核心实现 -->
  <bean id="persontarget" class="com.mycompany.personimpl">
  <property name="name"><value>tony</value></property>
  <property name="age"><value>51</value></property>
  </bean>
  <!-- step 2 : 定义interpreter -->
  <bean id="myadvisor" class="com.mycompany.myadvisor">
  <property name="someproperty"><value>custom string property value</val></property>
  </bean>
  <bean id="debuginterceptor" class="org.springframework.aop.interceptor.nop
  
  interceptor">
  </bean>
  <!-- step 3 : 定义接口 -->
  <bean id="person"
  class="org.springframework.aop.framework.proxyfactorybean"
  >
  <property name="proxyinterfaces"><value>com.mycompany.person</value></
  
  property>
  <property name="target"><ref local="persontarget"/></property>
  <!-- step 4 : 声明引用 interpreter -->
  <property name="interceptornames">
  <list>
  <value>myadvisor</value>
  <value>debuginterceptor</value>
  </list>
  </property>
  </bean>
  
  hivemind:
  <!-- 定义接口 -->
  <service-point id="adder" interface="slhynju.doconline.business.adder">
  <!-- 构造核心实现 -->
  <invoke-factory>
  <construct class="slhynju.doconline.business.adderimpl">
  <set-service property="sessionsource" service-id="sessionsource" />
  </construct>
  </invoke-factory>
  <!-- 声明引用 interpreter -->
  <interceptor service-id="hivemind.logginginterceptor"/>
  <interceptor service-id="transactioninterceptor"/>
  </service-point>
  comments:
  spring将接口和核心实现分开定义成两个bean,hivemind则统一定义成一个service。
  
  这点上hivemind优于spring。
  
  spring的aop框架较为成熟。hivemin的interpreter factory仍需要降低编写难度。
  
  hivemind采用javassist,性能上优于spring采用jdk proxy。
  
  * how to configure declarative transaction management?
  
  spring: 采用aop。
  
  <bean id="petstoretarget" class="org.springframework.samples.jpetstore.dom
  
  ain.logic.petstoreimpl">
  <property name="accountdao"><ref bean="accountdao"/></property>
  <!-- other dependencies omitted -->
  </bean>
  
  <bean id="petstore"
  class="org.springframework.transaction.interceptor.transactionproxyfac
  
  torybean">
  <property name="transactionmanager"><ref bean="transactionmanager"/></
  
  property>
  <property name="target"><ref local="petstoretarget"/></property>
  <property name="transactionattributes">
  <props>
  <prop key="insert*">propagation_required</prop>
  <prop key="update*">propagation_required</prop>
  <prop key="*">propagation_required,readonly</prop>
  </props>
  </property>
  </bean>
  
  hivemind: 没有内建支持。我自行开发了一个transactioninterceptor
  <interceptor service-id="transactioninterceptor">
  <include method="add*"/>
  </interceptor>
  
  comments:
  在spring中如果需要混合使用transactioninterceptor和其他interceptor,需要定义多个bean。增大了维护成本。
  spring支持jta等各种transaction manager。
  hivemind配置文件更加清楚简明。但不没有提供jta集成很致命。

扫描关注微信公众号