java

位置:IT落伍者 >> java >> 浏览文章

Spring VS. HiveMind 优点缺点大比拼


发布日期:2023年11月27日
 
Spring VS. HiveMind 优点缺点大比拼

在如下方面HiveMind优于Spring:

* HiveMind强制针对接口编程

* HiveMind使用module概念来分组管理service利于并行和迭代开发

* HiveMind使用的配置文件格式更清楚简明特别是将接口和实现统一定义成个service而Spring可能要定义好几个bean元素

* 在增加或移去interceptor时HiveMind只要修改行配置文件而Spring至少要修改两个bean元素

* 在定义interceptor时HiveMind采用javassist类库性能优于Spring采用的JDK proxy

在如下方面Spring优于HiveMind:

* Spring的AOP框架较为成熟编写interceptor的难度较低

* Spring内建和Hibernate的集成HiveMind尚未内建该集成

* Spring的transaction management支持各种transaction API如JDBCJDOJTA等等

基于以上发现建议在下一项目中采用HiveMind因为已经自行开发了HiveMind和Hibernate的集成以及简单的transaction management代码因而在下一项目中并不特别需要Spring的相应功能不过当前HiveMind是rc一旦发布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=examplesExampleBean/>

HiveMind:

Define an interface and core implementation POJO

配置文件servicepoint元素

Comments:

HiveMind强制针对接口编程优于Spring

* 是否提供service的namespace?

Spring:

仅仅使用id属性来唯一识别service

支持多配置文件

HiveMind:

提供Module概念用于管理service namespace类似于java中的package

支持多个配置文件

Comments:

HiveMind略优

* Service Lifecycle?

Spring:

Lifecycle models: Singleton Prototype

HiveMind:

Lifecycle models: Primitive Singleton Threaded Pooled

Comments

最常用的就是Singleton模型虽然HiveMind模型多于Spring但不构成优势

* Who manages service?

Spring: BeanFactory or ApplicationContext

HiveMind: Registry

* Dependency Injection?

Spring: yes type and type supported

HiveMind: yes type and type supported

* Service Depenency Injection?

Spring:

使用ref元素

<property name=beanOne><ref bean=anotherExampleBean/></property>

HiveMind:

在配置文件中使用setservice元素

<setservice serviceid=anotherService/>

Comments:

在更换实现时HiveMind因强制针对接口编程而占有优势

* Intializing and finalizing methods?

Spring :

<bean id=exampleInitBean class=examplesExampleBean

initmethod=init()

destroymethod=cleanup()/>

/>

HiveMind:

<construct class= initializemethod=/>

不支持finalizing method

Comments:

Spring略优

* How to configure AOP?

Spring:

<! Step : 定义核心实现 >

<bean id=personTarget class=commycompanyPersonImpl>

<property name=name><value>Tony</value></property>

<property name=age><value></value></property>

</bean>

<! Step : 定义Interpreter >

<bean id=myAdvisor class=commycompanyMyAdvisor>

<property name=someProperty><value>Custom string property value</val></property>

</bean>

<bean id=debugInterceptor class=orgspringframeworkaopinterceptorNop

Interceptor>

</bean>

<! Step : 定义接口 >

<bean id=person

class=orgspringframeworkaopframeworkProxyFactoryBean

>

<property name=proxyInterfaces><value>commycompanyPerson</value></

property>

<property name=target><ref local=personTarget/></property>

<! Step : 声明引用 interpreter >

<property name=interceptorNames>

<list>

<value>myAdvisor</value>

<value>debugInterceptor</value>

</list>

</property>

</bean>

HiveMind:

<! 定义接口 >

<servicepoint id=Adder interface=slhynjudoconlinebusinessAdder>

<! 构造核心实现 >

<invokefactory>

<construct class=slhynjudoconlinebusinessAdderImpl>

<setservice property=sessionSource serviceid=SessionSource />

</construct>

</invokefactory>

<! 声明引用 interpreter >

<interceptor serviceid=hivemindLoggingInterceptor/>

<interceptor serviceid=TransactionInterceptor/>

</servicepoint>

Comments:

Spring将接口和核心实现分开定义成两个beanHiveMind则统一定义成一个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=orgspringframeworksamplesjpetstoredom

ainlogicPetStoreImpl>

<property name=accountDao><ref bean=accountDao/></property>

<! Other dependencies omitted >

</bean>

<bean id=petStore

class=orgspringframeworktransactioninterceptorTransactionProxyFac

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_REQUIREDreadOnly</prop>

</props>

</property>

</bean>

HiveMind: 没有内建支持我自行开发了一个TransactionInterceptor

<interceptor serviceid=TransactionInterceptor>

<include method=add*/>

</interceptor>

Comments:

在Spring中如果需要混合使用TransactionInterceptor和其他Interceptor需要定义多个bean增大了维护成本

Spring支持JTA等各种Transaction manager

HiveMind配置文件更加清楚简明但不没有提供JTA集成很致命

               

上一篇:在Eclipse 3.1体验J2SE 5.0新特性四(图)

下一篇:Hibernate--基础配置