网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  spring vs. hivemind 优点缺点大比拼     
  文章作者:未知  文章来源:水木森林  
  查看:86次  录入:管理员--2007-11-17  
 
  在如下方面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集成很致命。
 
 
上一篇: pojo应用框架:spring vs. ejb 3.0    下一篇: spring reference
  相关文档
高级:struts彻底实践中文问题的解决方法 12-26
java与xml联合编程之dom篇(1) 11-16
swing和swt取舍之我见 11-17
two tips about blackberry 11-17
jdbc编程基础--很不错的文章! 11-17
轻松有效检查java代码的三个工具 11-17
sun认证java程序员(scjp 2)认证考试心得 11-17
jdbc基础教程之驱动设置 11-16
search 方法 11-16
java 树中 按最长路径行驶 11-17
jdbc 连接常见的数据库 11-17
java函数速查 11-17
java技术一瞥 11-17
tomcat 的数据库连接池设置与应用 11-17
开发实体ejb 增强的性能和开发 11-17
基于j2ee的电子商务网站实例解析 11-17
weblet安全性教程 11-17
j2se api读取properties文件六种方法 11-17
java基础入门 初学java编程的一些小技巧 04-02
oracle rac on sun cluster 3.1(step by step) 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息