在如下方面HiveMind优于Spring:
* HiveMind强制针对接口编程;
* HiveMind使用module概念来分组治理service,利于并行和迭代开发;
* HiveMind使用的配置文件格式更清楚简明,将接口和实现统一定义成1个service,而Spring可能要定义好几个bean元素;
* 在增加或移去interceptor时,HiveMind只要修改1行配置文件,而Spring至少要修改两个bean元素;
<service-point id="Adder" interface="org.apache.hivemind.examples.Adder">
<create-instance class="org.apache.hivemind.examples.impl.AdderImpl"/>
<interceptor service-id="hivemind.LoggingInterceptor"/>
</service-point>
这里又发现了一个比Spring要方便的地方,interceptor可以直接定义在(我都不知道怎么说了,用Bean还是service-point?) Component的内部,用Spring的话还得另外建立一个新的Bean,然后指定Advice的作用域,如果系统中只有一两处需要的话,多一个 Bean的配置显得有点不雅。记得xWork也是这样定义interceptor的。
* 在定义interceptor时,HiveMind采用Javassist类库,性能优于Spring采用的JDK proxy。
在如下方面Spring优于HiveMind:
* Spring的AOP框架较为成熟,编写interceptor的难度较低。
* Spring内建和Hibernate的集成,HiveMind尚未内建该集成。
* Spring的transaction management支持各种transaction API,如JDBC、JDO、JTA等等。
* HiveMind强制针对接口编程;
* HiveMind使用module概念来分组治理service,利于并行和迭代开发;
* HiveMind使用的配置文件格式更清楚简明,将接口和实现统一定义成1个service,而Spring可能要定义好几个bean元素;
* 在增加或移去interceptor时,HiveMind只要修改1行配置文件,而Spring至少要修改两个bean元素;
<service-point id="Adder" interface="org.apache.hivemind.examples.Adder">
<create-instance class="org.apache.hivemind.examples.impl.AdderImpl"/>
<interceptor service-id="hivemind.LoggingInterceptor"/>
</service-point>
这里又发现了一个比Spring要方便的地方,interceptor可以直接定义在(我都不知道怎么说了,用Bean还是service-point?) Component的内部,用Spring的话还得另外建立一个新的Bean,然后指定Advice的作用域,如果系统中只有一两处需要的话,多一个 Bean的配置显得有点不雅。记得xWork也是这样定义interceptor的。
* 在定义interceptor时,HiveMind采用Javassist类库,性能优于Spring采用的JDK proxy。
在如下方面Spring优于HiveMind:
* Spring的AOP框架较为成熟,编写interceptor的难度较低。
* Spring内建和Hibernate的集成,HiveMind尚未内建该集成。
* Spring的transaction management支持各种transaction API,如JDBC、JDO、JTA等等。
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集成很致命。 |