在如下方面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集成很致命。
闽公网安备 35060202000074号