| |
在如下方面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集成很致命。
|
|